在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。 任何人都可以告诉我如何才能得到这个工作?
两件事情。
- 如果你从npm命令运行蛋糕,你可以指定
cake install
或cake build
作为scripts.install字段。 在咖啡脚本在本地安装之后,它会运行,并且它的bin被适当地链接(在windows上有一个shim),并且会用一个PATH环境运行,以便在系统path中使用本地安装的cake
而不是其他任何东西。 - 如果你不是通过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