Подтвердить что ты не робот

Компиляция 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. Может ли кто-нибудь сказать мне, как я могу заставить это работать?

4b9b3361

Ответ 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 как номера версий).

- фг