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


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

5 68

5 ответов:

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

  • код coffeescript входит src
  • код компилируется в lib
  • src стремится к моему git РЕПО,lib в моем .gitignore
  • lib публикуется в npm,src в моем .npmignore
  • the в моем devDependencies

вы можете взглянуть на простой пакет Мой,refix, для вдохновения:

вы можете написать модули NPM в coffeescript, но для того, чтобы их могли использовать пользователи JS, они должны быть скомпилированы в JS перед публикацией на NPM.

package.json делает это легко с их prepublish Хук-скрипт, который запускает указанный скрипт перед публикацией. Вот пример prepublish NPM крюк в зомби.js

https://github.com/assaf/zombie/blob/master/package.json#L16

Я написал пакеты npm в CoffeeScript с нуля. Я рекомендую вам использовать CoffeScript для узла, а также для браузера. Однако перед использованием или публикацией модуля необходимо скомпилировать исходный код CoffeeScript в JavaScript. Однако это не должно удерживать вас от использования CoffeeScript.

совет: при разработке, использовать coffee -cw yourfile.coffee (командная строка) для просмотра изменений в файле и компиляции при сохранении.

хотя я не уверен, что это лучший подход, технически это и можно написать свой пакет в основном в CoffeeScript.

в принципе, вы можете написать JS-файл, который просто обертывает , например:

bin / howl.кофе

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.

если многие из ваших модулей имеют coffee-script в своем devDependencies, полезно просто глобально установить coffee-script вместо того, чтобы установить его для каждого модуля (что занимает гораздо больше времени).

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