8

我开始使用 node.j 进行开发,我遇到了一个关于使用“强大”模块的问题。

我有这个错误:

错误:找不到模块“强大”

这是使用 'npm ls installed' 安装的模块列表:

├─┬ express@2.5.9
│ ├── connect@1.8.7
│ ├── mime@1.2.4
│ ├── mkdirp@0.3.0
│ └── qs@0.4.2
├── 强大@1.0.9
├─┬ node-inspector@0.1.10
│ ├── paperboy@0.0.3
│ └─┬ socket.io@0.8.7
│ ├── policyfile@0.0.4
│ ├── redis@0.6.7
│ └─┬ socket.io-client@0.8.7
│ ├── uglify-js@1.0.6
│ ├── websocket-client@1.0.0
│ └── xmlhttprequest@1.2.2
├─┬ npm@1.1.21
│ ├── abbrev@1.0.3
│ ├── archy@0.0.2
│ ├── block-stream@0.0.5
│ ├── chownr@0.0.1
│ ├── fstream@0.1.18
│ ├─┬ fstream-npm@0.0.6
│ │ └── fstream-ignore@0.0.5
│ ├── 优雅-fs@1.1.8
│ ├── 继承@1.0.0
│ ├── ini@1.0.2
│ ├── lru-cache@1.0.5
│ ├── minimatch@0.2.2
│ ├── mkdirp@0.3.0
│ ├─┬ node-gyp@0.4.1
│ │ ├── ansi@0.0.4
│ │ └── glob@3.1.9
│ ├── node-uuid@1.3.3
│ ├── nopt@1.0.10
│ ├── proto-list@1.0.0
│ ├── read@0.0.2
│ ├── request@2.9.153
│ ├── rimraf@2.0.1
│ ├── semver@1.0.13
│ ├── slide@1.1.3
│ ├── tar@0.1.13
│ ├── uid-number@0.0.3
│ └── which@1.0.5
└─┬ socket.io@0.9.6
  ├── 策略文件@0.0.4
  ├── redis@0.6.7
  └─┬ socket.io-client@0.9.6
    ├─┬ active-x-obfuscator@0.0.1
    │ └── zeparser@0.0.5
    ├── uglify-js@1.2.5
    ├─┬ ws@0.4.14
    │ ├── 指挥官@0.5.2
    │ └── options@0.0.3
    └── xmlhttprequest@1.2.2

我补充说它是唯一产生此错误的模块。

另外,我不太明白封装某些模块的方式,看来npm是直接在我使用模块安装命令的目录中安装模块,我注意到在express/connect/中已经安装了强大的模块首次安装。

你能给我更多关于模块安装树的信息吗?
感谢您的回复

干杯

4

2 回答 2

7

接受的答案看起来非常全面和正确,但这对我有用:

npm install -d

d 代表依赖项(我认为)

于 2012-07-27T06:23:43.190 回答
3

要了解模块解析,请查看模块文档,尤其是从文件夹加载node_modules

例如,如果文件位于'/home/ry/projects/foo.js'called require('bar.js'),则节点将按以下顺序查找以下位置:

  • /home/ry/projects/node_modules/bar.js
  • /home/ry/node_modules/bar.js
  • /home/node_modules/bar.js
  • /node_modules/bar.js

NPM 通过将模块安装到以下位置来利用这一点:

./node_modules/{module}

因此,当您使用 时npm install formidable,它将创建模块并将其安装到:

./node_modules/formidable

但是,这意味着只有当前目录中的脚本,包括子目录,才能成功使用require('formidable')

./foo.js
./lib/bar.js
./src/baz.js
./src/sub/qux.js

-g但是,您可以将模块安装为“全局”,但您必须使用or明确要求它--global

npm install -g formidable

然后,系统上的任何脚本都应该能够require('formidable').


至于树输出,您当前有 5 个可从当前目录安装的模块:

  • express
  • formidable
  • node-inspector
  • npm
  • socket.io

树中的其他所有内容都是这些模块的依赖项及其依赖项等的列表,但require(...)在您的脚本中只有这 5 个可用。

于 2012-05-06T03:11:55.490 回答