“错误:无法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
文件时,会调用一连串的方法:
-
require("design.io")
得到文件系统事件的通知。 Design.io然后调用 -
require('shift').render(string, extension, callback)
。 Shift.js然后调用 -
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 foo
, foo
模块被安装在当前工作目录下名为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