Estoy construyendo una aplicación que consiste en private npm repos integrado en CoffeeScript. Para mantener el lenguaje de implementación independiente y permitir que cada aplicación especifique su versión de CoffeeScript, incluyo CoffeeScript como una dependencia en cada biblioteca y compilando JavaScript en la instalación de npm.Compilación coffeescript en npm install
npm la instalación funciona bien para los repositorios independientes, pero falla cuando intento instalar un repositorio que depende de otro repositorio que se está creando.
Así que si tengo repo-a
, cuya package.json
incluye lo siguiente:
"dependencies": {
"coffee-script": "~1.2.0"
},
"scripts": {
"install": "./node_modules/coffee-script/bin/cake install"
}
y repo-b
, cuya package.json
incluye lo siguiente:
"dependencies": {
"coffee-script": "~1.2.0",
"repo-a": "git+ssh://[email protected]:myrepo.git"
},
"scripts": {
"install": "./node_modules/coffee-script/bin/cake install"
}
donde ambos tienen una Cakefile
que tiene este aspecto, con un install
tarea llamada en un npm install
gancho:
{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
obras para para repo-a
, pero falla por repo-b
con este mensaje:
sh: ./node_modules/coffee-script/bin/cake: No such file or directory
momento en el que existe un directorio sin terminar ___coffee-script.npm
en node_modules
.
Por supuesto, sería mucho más fácil usar un app.js wrapper, pero necesito implementar JavaScript, no CoffeeScript. ¿Alguien puede decirme cómo podría hacer que esto funcione?
por lo que vale la pena, este enfoque funciona cuando me baso en un binario global 'cake', y solo falla porque estoy especificando el' cake' instalado localmente. –