无法在Windows中找到本地安装的模块

btl*_*ler 0 node.js npm

我有一个非常简单的脚本,我用来测试这个场景,但我无法弄清楚为什么Node无法加载本地安装的模块.

的package.json:

{
  "name": "Test",
  "version": "1.0.0",
  "dependencies": {
    "cli-progress-bar": "^0.1.0"
  }
}
Run Code Online (Sandbox Code Playgroud)

Test.js:

var ProgressBar = require("cli-progress-bar"),
    progress = new ProgressBar(),
    processed = 0;

function update () {
    if (processed < 100) {
        progress.show(++processed / 100);
        setTimeout(update, 750);
    }
}

update();
Run Code Online (Sandbox Code Playgroud)

据我所知,这应该只是加载cli-progress-bar包,并在退出之前运行一个简单的进度条完成.

这是我尝试安装依赖项并运行脚本时得到的输出:

C:\Users\Benjamin\Desktop\Test>node -v
v4.2.1

C:\Users\Benjamin\Desktop\Test>npm -v
3.3.10

C:\Users\Benjamin\Desktop\Test>npm install
Test@1.0.0 C:\Users\Benjamin\Desktop\Test
??? cli-progress-bar@0.1.0
  ??? cli-character-set@0.1.0
  ??? lodash.padleft@3.1.1
  ? ??? lodash._basetostring@3.0.1
  ? ??? lodash._createpadding@3.6.1
  ?   ??? lodash.repeat@3.0.1
  ??? lodash.padright@3.1.1
  ??? log-update@1.0.2
    ??? ansi-escapes@1.1.0
    ??? cli-cursor@1.0.2
      ??? restore-cursor@1.0.1
        ??? exit-hook@1.1.1
        ??? onetime@1.0.0

npm WARN EPACKAGEJSON Test@1.0.0 No description
npm WARN EPACKAGEJSON Test@1.0.0 No repository field.
npm WARN EPACKAGEJSON Test@1.0.0 No license field.

C:\Users\Benjamin\Desktop\Test>node Test.js
module.js:339
    throw err;
    ^

Error: Cannot find module 'cli-progress-bar'
    at Function.Module._resolveFilename (module.js:337:15)
    at Function.Module._load (module.js:287:25)
    at Module.require (module.js:366:17)
    at require (module.js:385:17)
    at Object.<anonymous> (C:\Users\Benjamin\Desktop\Test\Test.js:1:81)
    at Module._compile (module.js:435:26)
    at Object.Module._extensions..js (module.js:442:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:311:12)
    at Function.Module.runMain (module.js:467:10)
Run Code Online (Sandbox Code Playgroud)

我可以看到安装包,C:\Users\Benjamin\Desktop\Test\node_modules但似乎无法使用它.

C:\Users\Benjamin\Desktop\Test>dir node_modules
 Volume in drive C is OS
 Volume Serial Number is 7294-620F

 Directory of C:\Users\Benjamin\Desktop\Test\node_modules

11/02/2015  10:00 AM    <DIR>          .
11/02/2015  10:00 AM    <DIR>          ..
11/02/2015  10:00 AM    <DIR>          ansi-escapes
11/02/2015  10:00 AM    <DIR>          cli-character-set
11/02/2015  10:00 AM    <DIR>          cli-cursor
11/02/2015  10:00 AM    <DIR>          cli-progress-bar
11/02/2015  10:00 AM    <DIR>          exit-hook
11/02/2015  10:00 AM    <DIR>          lodash.padleft
11/02/2015  10:00 AM    <DIR>          lodash.padright
11/02/2015  10:00 AM    <DIR>          lodash.repeat
11/02/2015  10:00 AM    <DIR>          lodash._basetostring
11/02/2015  10:00 AM    <DIR>          lodash._createpadding
11/02/2015  10:00 AM    <DIR>          log-update
11/02/2015  10:00 AM    <DIR>          onetime
11/02/2015  10:00 AM    <DIR>          restore-cursor
               0 File(s)              0 bytes
              15 Dir(s)  283,532,754,944 bytes free

C:\Users\Benjamin\Desktop\Test>npm ls
Test@1.0.0 C:\Users\Benjamin\Desktop\Test
??? cli-progress-bar@0.1.0
  ??? cli-character-set@0.1.0
  ??? lodash.padleft@3.1.1
  ? ??? lodash._basetostring@3.0.1
  ? ??? lodash._createpadding@3.6.1
  ?   ??? lodash.repeat@3.0.1
  ??? lodash.padright@3.1.1
  ??? log-update@1.0.2
    ??? ansi-escapes@1.1.0
    ??? cli-cursor@1.0.2
      ??? restore-cursor@1.0.1
        ??? exit-hook@1.1.1
        ??? onetime@1.0.0
Run Code Online (Sandbox Code Playgroud)

每次我尝试运行脚本时,都会出现同样的错误.

sim*_*p-r 5

你找不到名为"cli-progress-bar"的模块的原因是因为该模块没有正确地暴露自己.package.json文件有一个名为main的属性,必须将其设置为从模块导出的脚本的名称.如果脚本被称为index.js,那么npm会找到它,因为脚本名为bar.js,而package.json文件说主文件名为index.js,它没有被正确公开,并且无法通过require找到.