“错误:无法find模块”less“”Node.js模块加载偏好/订单/caching?

这就是情况…所以我创build了一个Node.js模块,作为一些Node.js模板引擎的接口, Shift.js 。 这包含在另一个Node.js模块Design.io (它指定了Design.io的package.json dependencies块)内。 Design.io监视文件的更改。

然后你build立一个应用程序,并require('design.io') 。 您还可以在您的项目中安装Less和Stylus。

这样,当您保存.less.styl文件时,会调用一连串的方法:

  1. require("design.io")得到文件系统事件的通知。 Design.io然后调用
  2. require('shift').render(string, extension, callback) 。 Shift.js然后调用
  3. require(moduleFor(extension)) # require("less") 。 该string被编译。

在我的应用程序(当前工作目录),我已经安装了less量和手写笔:

 npm install less stylus 

我遇到的问题是,在Shift.js模块内调用的第3步 ,我得到这样的错误:

 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) 

我的问题是,这是为什么发生? 我认为只要安装在某个地方 ,就可以dynamic地从模块中获取库…我错过了什么?

目标是像Shift.js这样的库不必定义package.json每一个依赖关系package.json对于“模板引擎的接口”库,这将需要太多的依赖,应用程序可能永远不会使用。

感谢您的帮助,希望有些清楚。

当你npm install foofoo模块被安装在当前工作目录下名为node_modules的目录中。

当你安装这个node_modules库时,它只会查找模块在自己的 node_modules目录中,或者在全局目录之一require.resolve()search中。

这就是解决您的问题的简单方法:

 npm install -g less 

然后该库对您的计算机上的所有Node.js代码全局可见,而不是仅在当前工作目录中可见。

另外,如果你只想shift看看,那么做一下这样的事情:

 npm install shift cd node_modules/shift npm install less