Comstackndo coffeescript en npm install

Estoy creando una aplicación que consiste en repositorys privados de npm construidos en CoffeeScript. Para mantener la implementación sin tener en cuenta el idioma y permitir que cada aplicación especifique su versión de CoffeeScript, estoy incluyendo CoffeeScript como una dependencia en cada biblioteca y construyo en JavaScript tras la instalación de npm.

La instalación de npm funciona bien para los repositorys independientes, pero falla cuando bash instalar un repository que depende de que se esté construyendo otro repository.

Así que si tengo repo-a , cuyo package.json incluye esto:

 "dependencies": { "coffee-script": "~1.2.0" }, "scripts": { "install": "./node_modules/coffee-script/bin/cake install" } 

y repo-b , cuyo package.json incluye esto:

 "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 un Cakefile que se ve así, con una tarea de install llamada en un gancho de install npm:

 {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 funciona para repo-a , pero falla para repo-b con este mensaje:

 sh: ./node_modules/coffee-script/bin/cake: No such file or directory 

en cuyo punto existe un directorio ___coffee-script.npm en node_modules .

Por supuesto, sería mucho más fácil usar un envoltorio app.js , pero necesito implementar JavaScript, no CoffeeScript. ¿Alguien puede decirme cómo podría hacer que esto funcione?

Dos cosas.

  1. Si está ejecutando Cake desde un comando npm, solo puede especificar la cake install cake build o la cake build como el campo scripts.install. Esto se ejecutará después de que el café-script se haya instalado localmente, y su contenedor se vincule adecuadamente (con un calce en las ventanas), y se ejecutará con un entorno PATH tal que la cake localmente instalada se use en lugar de cualquier otra cosa en la ruta del sistema.
  2. Si no está ejecutando esto desde un comando npm, pero aún así espera que coffee-script ya se haya instalado localmente a través de npm (que parece), entonces probablemente debería estar ./node_modules/.bin/cake o ./node_modules/.bin/coffee lugar de sumergirse en los ./node_modules/.bin/coffee internos del paquete.

Si no está instalando coffee-script con npm, sino que utiliza algunos submódulos de git o algo así, entonces estará solo 🙂

Recomendaría comstackr localmente el JS y almacenar los paquetes comstackdos como archivos tar.gz en S3. Para el desarrollo local, puede npm link y en producción apunta a las URL del archivo. Si no desea una versión de sus dependencias, puede tener la misma URL actualizada una y otra vez.

Tenga en cuenta este error de npm: https://github.com/isaacs/npm/issues/1727 (básicamente tendrá que borrar su carpeta node_modules cada vez que actualice los deps en una aplicación que use git / http urls como versión números).

–fg