在npm install上编译coffeescript

我正在构build一个由CoffeeScript中构build的私有npm repos组成的应用程序。 为了保持与语言无关的部署,并允许每个应用程序指定它的CoffeeScript版本,我将CoffeeScript作为每个库中的依赖项,并在npm安装时构build到JavaScript中。

npm的安装工作正常的独立回购,但失败时,我试图安装回购,取决于正在build立的另一个回购。

所以如果我有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://git@mydomain.com:myrepo.git" }, "scripts": { "install": "./node_modules/coffee-script/bin/cake install" } 

其中两个都有一个Cakefile ,看起来像这样,在npm install钩子上调用一个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 installcake build作为scripts.install字段。 咖啡脚本在本地安装之后,它会运行,并且它的bin被适当地链接(在windows上有一个shim),并且会用一个PATH环境运行,以便在系统path中使用本地安装的cake而不是其他任何东西。
  2. 如果你不是通过npm命令运行这个脚本,但是你仍然期待那个咖啡脚本已经通过npm在本地安装了(看起来像),那么你可能会碰到./node_modules/.bin/cake或者./node_modules/.bin/coffee而不是潜入包内部。

如果你不是用npm安装咖啡脚本,而是使用一些git子模块或者其他东西,那么你就是在你自己:)

我build议在本地构buildJS,并将编译后的包作为tar.gz文件存储在S3上。 对于本地开发,您可以npm link并在生产中指向存档url。 如果你不想要版本你的依赖关系,你可以只是一遍又一遍地更新相同的url。

请记住这个npm错误: https : //github.com/isaacs/npm/issues/1727 (你基本上必须擦拭你的node_modules文件夹,每次你更新使用git / http url作为版本的应用程序的代码号)。

–fg