Компиляция coffeescript на npm install
Я создаю приложение, состоящее из private npm repos, встроенного в CoffeeScript. Чтобы сохранить язык развертывания-агностик и разрешить каждому приложению указывать свою версию CoffeeScript, я включаю CoffeeScript в качестве зависимости в каждой библиотеке и создаю JavaScript при установке npm.
npm установка отлично работает для автономных репозиториев, но не работает, когда я пытаюсь установить репо, которое зависит от построенного другого репо.
Итак, если у меня repo-a
, чей package.json
включает в себя следующее:
"dependencies": {
"coffee-script": "~1.2.0"
},
"scripts": {
"install": "./node_modules/coffee-script/bin/cake install"
}
и repo-b
, чья package.json
включает в себя следующее:
"dependencies": {
"coffee-script": "~1.2.0",
"repo-a": "git+ssh://[email protected]:myrepo.git"
},
"scripts": {
"install": "./node_modules/coffee-script/bin/cake install"
}
где оба имеют Cakefile
, который выглядит следующим образом: с задачей install
, вызванной при вызове npm install
:
{print} = require "util"
{spawn} = require "child_process"
coffee = "./node_modules/coffee-script/bin/coffee"
echo = (child) ->
child.stdout.on "data", (data) -> print data.toString()
child.stderr.on "data", (data) -> print data.toString()
child
install = (cb) ->
console.log "Building..."
echo child = spawn coffee, ["-c", "-o", "lib", "src"]
child.on "exit", (status) -> cb?() if status is 0
task "install", "Install, build, and test repo", install
npm install
работает для repo-a
, но с ошибкой repo-b
с этим сообщением:
sh: ./node_modules/coffee-script/bin/cake: No such file or directory
в этот момент в node_modules
существует недоработанный каталог ___coffee-script.npm
.
Конечно, было бы гораздо проще использовать app.js обертку, но мне нужно развернуть JavaScript, а не CoffeeScript. Может ли кто-нибудь сказать мне, как я могу заставить это работать?
Ответы
Ответ 1
Две вещи.
- Если вы используете торт из команды npm, вы можете просто указать
cake install
или cake build
как поле scripts.install. Это будет работать после того, как кофе- script будет установлен локально, а его корзина привязана соответствующим образом (с помощью прокладки в окнах) и будет работать с окружением PATH, так что локально установленный cake
используется, а не что-либо еще в системный путь.
- Если вы не запускаете это из команды npm, но вы, тем не менее, ожидаете, что кофе-w370 уже установлен локально через npm (как это выглядит), тогда вам, вероятно, следует нажать
./node_modules/.bin/cake
или ./node_modules/.bin/coffee
, а не погружения в внутренние части пакета.
Если вы не устанавливаете coffee- script с npm, но вместо этого используете некоторые подмодули w20 > или что-то еще, тогда вы сами:)
Ответ 2
Я бы рекомендовал локально построить JS и сохранить скомпилированные пакеты в виде tar.gz
файлов на S3. Для локального развития вы можете npm link
, и в процессе производства вы указываете на URL-адреса архива. Если вы не хотите изменять свои зависимости, вы можете обновлять один и тот же URL снова и снова.
Имейте в виду эту ошибку в npm так: https://github.com/isaacs/npm/issues/1727 (вам в основном придется стереть вашу папку node_modules каждый раз, когда вы обновляете относится к приложению, которое использует URL-адреса git/http как номера версий).
- фг