it-swarm.com.ru

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

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

69
Zhe Chen

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

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

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

100
Linus Gustav Larsson Thiel

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

package.json облегчает эту задачу с помощью обработчика сценариев prepublish, который запускает указанный сценарий перед публикацией. Вот пример ловушки prepublish NPM в zombie.js

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

10
Joseph Moniz

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

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

1
davidpfahler

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

1
aleclarson

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

0
joshuarh