lib - "Error: no se puede encontrar el módulo ''menos''" Node.js módulo cargar preferencia/orden/caché?
error cannot find module onoff (1)
Aquí está la situación ... Así que he creado un módulo Node.js que actúa como una interfaz para algunos motores de plantillas de Node.js, Shift.js . Eso se incluye dentro de otro módulo Node.js, Design.io (se especifica el bloque de dependencies
package.json de Design.io). Design.io mira los archivos para ver los cambios.
Luego construyes una aplicación y require(''design.io'')
. También instala, digamos, Less y Stylus en su proyecto.
De esta manera, cuando guardas un archivo .less
o .styl
, se llama una cadena de métodos:
-
require("design.io")
recibe notificaciones del evento del sistema de archivos. Design.io luego llama -
require(''shift'').render(string, extension, callback)
. Shift.js luego llama -
require(moduleFor(extension)) # require("less")
. La cadena está compilada.
En mi aplicación (directorio de trabajo actual) he instalado menos y stylus:
npm install less stylus
El problema que estoy teniendo es que, en el paso 3 que se llama desde el módulo Shift.js, obtengo errores como este:
Error: Cannot find module ''less''
at Function._resolveFilename (module.js:334:11)
at Function._load (module.js:279:25)
at Module.require (module.js:357:17)
at require (module.js:368:17)
at Less.engine (/Users/viatropos/Documents/git/plugins/design.io/node_modules/shift/lib/shift/less.js:6:14)
at Less.render (/Users/viatropos/Documents/git/plugins/design.io/node_modules/shift/lib/shift/less.js:18:21)
at /Users/viatropos/Documents/git/plugins/design.io/node_modules/shift/lib/shift.js:69:23
at /Users/viatropos/Documents/git/plugins/design.io/node_modules/async/lib/async.js:118:13
at Object.forEachSeries (/Users/viatropos/Documents/git/plugins/design.io/node_modules/async/lib/async.js:134:9)
at Object.render (/Users/viatropos/Documents/git/plugins/design.io/node_modules/shift/lib/shift.js:78:31)
Mi pregunta es, ¿por qué está sucediendo esto? Pensé que podrías necesitar dinámicamente bibliotecas de un módulo, siempre que se instalaran en algún lugar ... ¿Qué me falta?
El objetivo sería que las bibliotecas como Shift.js no tuvieran que definir cada dependencia en package.json
... Para una biblioteca de "interfaz para los motores de plantillas", eso requeriría demasiadas dependencias que la aplicación probablemente nunca usaría.
Gracias por la ayuda, la esperanza fue algo clara.
Cuando npm install foo
, el módulo foo
se instala en un directorio llamado node_modules
en el directorio de trabajo actual.
Cuando instala esta biblioteca de shift
, solo busca módulos para requerir dentro de su propio directorio node_modules
, o en uno de los directorios globales require.resolve()
búsquedas.
Y esa es la solución simple a tu problema:
npm install -g less
Y luego, la biblioteca es visible en todo el mundo para todo el código Node.js en su computadora, en lugar de solo ser visible para codificar en el directorio de trabajo actual.
Alternativamente, si solo quiere shift
para verlo, entonces haga algo como esto:
npm install shift
cd node_modules/shift
npm install less