Я использовал coffeescript какое-то время. Теперь мне нужно написать пакет npm, могу ли я записать его в coffeescript, или я должен скомпилировать coffeescript в javascript?
Могу ли я написать пакет npm в coffeescript?
Ответ 1
Я собираюсь предположить, что вы пишете свой пакет в coffeescript, но публикуете его только в javascript. Я делаю это так:
- код coffeescript находится в
src
- код скомпилирован в
lib
-
src
привязан к моему git репо,lib
находится в моем.gitignore
-
lib
публикуется до npm,src
находится в моем.npmignore
- пакет
coffee-script
находится в моемdevDependencies
Вы можете взглянуть на простой пакет, refix, для вдохновения:
- https://github.com/linus/refix
-
npm install refix
Ответ 2
Вы можете писать модули NPM в coffeescript, но для того, чтобы они могли использоваться пользователями JS, они должны быть скомпилированы в JS, прежде чем вы опубликуете на NPM.
package.json
делает это с помощью prepublish
script hook, который запускает указанный script перед публикацией. Вот пример крюка prepublish
NPM в zombie.js
https://github.com/assaf/zombie/blob/master/package.json#L16
Ответ 3
Я написал npm-пакеты в CoffeeScript с нуля. Я рекомендую использовать CoffeScript для node, а также для браузера. Однако, прежде чем вы сможете использовать или опубликовать свой модуль, вам необходимо скомпилировать исходный код CoffeeScript для JavaScript. Однако это не должно задерживать вас от использования CoffeeScript.
Совет. При разработке используйте coffee -cw yourfile.coffee
(командная строка), чтобы просмотреть файл для изменений и скомпилировать при сохранении.
Ответ 4
Пока я не уверен, что это лучший подход, технически можно написать свой пакет в основном в CoffeeScript.
В принципе, вы можете написать JS файл, который просто обертывает команду coffee
, например:
бен /howl.coffee
console.log 'Awwwooooo!'
bin/howl.js
#!/usr/bin/env node
var path = require('path');
var exec = require('child_process').exec;
var coffee = path.resolve(__dirname, '../node_modules/coffee-script/bin/coffee');
var howl = path.resolve(__dirname, './howl.coffee');
var command = coffee + ' ' + howl;
exec(command, function(error, stdout) {
if (error) { throw error };
console.log(stdout);
});
Запуск node howl.js
(или просто howl
при установке в глобальном масштабе) теперь выводит Awwooooo!
. Вы можете сделать что-то вроде require
других файлов CoffeeScript и получить доступ к аргументам, передав их из "обертки" JavaScript в CoffeeScript.
Во всяком случае, могут быть причины не делать этого, но он работал у меня до сих пор, поэтому я решил представить это для дополнительной перспективы.
Для простого примера, использующего этот метод, проверьте https://www.github.com/joshuabc/packdown.
Ответ 5
Если у ваших модулей есть coffee-script
в devDependencies
, полезно просто глобально установить coffee-script
вместо того, чтобы устанавливать его для каждого модуля (что занимает намного больше времени).
coffee-build - это глобальный менеджер версий для coffee-script
.
Просто добавьте эти 2 скрипта в свой package.json
:
{
"name": "my-coffee-module",
"scripts": {
"build": "coffee-build -v 1.11.x -b -o js src",
"postinstall": "npm run build"
}
}
Обратите внимание, что -v 1.11.x
не является точной версией, которая допускает неявные обновления.
Единственное падение состоит в том, что пользователи должны npm install -g coffee-build
, прежде чем они смогут установить ваш модуль.