“错误:找不到模块'少'”Node.js模块加载首选项/订单/缓存?

时间:2012-02-17 00:05:42

标签: node.js module require commonjs

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

然后构建一个应用程序并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")。字符串已编译。
  4. 在我的应用程序(当前工作目录)中,我安装了less和stylus:

    npm install less stylus
    

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

    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中的每一个依赖关系...对于“模板引擎的接口”库,这将需要太多的依赖关系,应用程序将可能从未使用过。

    感谢您的帮助,希望有点明确。

1 个答案:

答案 0 :(得分:25)

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
相关问题