Могу ли я написать пакет npm в coffeescript?

Я использовал coffeescript какое-то время. Теперь мне нужно написать пакет npm, могу ли я записать его в coffeescript, или я должен скомпилировать coffeescript в javascript?

Ответ 1

Я собираюсь предположить, что вы пишете свой пакет в coffeescript, но публикуете его только в javascript. Я делаю это так:

  • код coffeescript находится в src
  • код скомпилирован в lib
  • src привязан к моему git репо, lib находится в моем .gitignore
  • lib публикуется до npm, src находится в моем .npmignore
  • пакет coffee-script находится в моем devDependencies

Вы можете взглянуть на простой пакет, 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, прежде чем они смогут установить ваш модуль.