情况是这样的……所以我创建了一个 Node.js 模块,作为一些 Node.js 模板引擎的接口(interface),Shift.js .它包含在另一个 Node.js 模块中,Design.io (它指定了 Design.io 的 package.json dependencies
block )。 Design.io 监视文件以进行更改。
然后你构建一个应用程序和 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")
.字符串已编译。
在我的应用程序(当前工作目录)中,我安装了 less 和 stylus:
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)
我的问题是,为什么会这样?我认为您可以动态地从模块中请求库,只要它们安装在某处......我错过了什么?
目标是像 Shift.js 这样的库不必在 package.json
中定义每一个依赖项……对于“模板引擎接口(interface)”库,这将需要太多应用程序可能永远不会使用的依赖项。
感谢您的帮助,希望这有点清楚。
最佳答案
当您 npm install foo
时,foo
模块会安装在当前工作目录中名为 node_modules
的目录中。
当您安装此 shift
库时,它只会在 其自己的 node_modules
目录中或在全局目录之一中查找需要的模块目录 require.resolve()
搜索。
这就是解决您问题的简单方法:
npm install -g less
然后该库对您计算机上的所有 Node.js 代码全局可见,而不是仅对当前工作目录中的代码可见。
或者,如果您只希望 shift
看到它,则执行以下操作:
npm install shift
cd node_modules/shift
npm install less
关于node.js - "Error: Cannot find module ' 少 '"Node.js 模块加载首选项/顺序/缓存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9321061/