nodejs cant find module

Cannot find module 问题

在测试WebRTC codelab的时候,运行codelab\complete\step1出错,抛出Error:

 
  
  1. module.js:340
  2.     throw err;
  3.           ^
  4. Error: Cannot find module 'node-static'
  5.     at Function.Module._resolveFilename (module.js:338:15)
  6.     at Function.Module._load (module.js:280:25)
  7.     at Module.require (module.js:364:17)
  8.     at require (module.js:380:17)
  9.     at Object.<anonymous> (X:\WebProjects\codelab\complete\step1\server.js:1:72)
  10.     at Module._compile (module.js:456:26)
  11.     at Object.Module._extensions..js (module.js:474:10)
  12.     at Module.load (module.js:356:32)
  13.     at Function.Module._load (module.js:312:12)
  14.     at Function.Module.runMain (module.js:497:10)

看到StackOverflow上有人出主意“$ npm install [email protected]”“$ npm install serve-static”云云,不起作用,在这里给出正确解决方案。

为何发生Cannot find module问题

首先明确全局模块的默认安装位置:

 
  
  1. $npm root -g
  2. X:\Program Files\nodejs\prefix\node_modules

接着查看全局模块的默认搜索路径:

 
  
  1. $node
  2. > global.module.paths
  3. [ 'X:\\Users\\Admin\\repl\\node_modules',
  4.   'X:\\Users\\Admin\\node_modules',
  5.   'X:\\Users\\node_modules',
  6.   'X:\\node_modules' ]

发现两者并没有交集,难怪找不到。

nodejs cant find module_第1张图片

接着在core-modules-sources/lib/module.js上下了个断点,发现Node.js默认还从下列路径搜索全局模块:

 
  
  1. ["Y:\\WebProjects\\codelab\\complete\\step1\\node_modules","Y:\\WebProjects\\codelab\\complete\\node_modules","Y:\\WebProjects\\codelab\\node_modules","Y:\\WebProjects\\node_modules","Y:\\node_modules","X:\\Users\\Admin\\.node_modules","X:\\Users\\Admin\\.node_libraries","Y:\\Program Files\\lib\\node"]

nodejs cant find module_第2张图片

更加确定了我的猜想,默认的搜索路径并不包含模块的默认安装路径。

解决Cannot find module方案

那么解决方案就简单了,先npm install node-static -g,然后可以添加环境变量 NODE_PATH ,指向 npm root -g 给出的路径。也可以在WebStorm的项目配置上做一个项目级别的变量:

nodejs cant find module_第3张图片

还可以在项目目录下npm install node-static。

至此问题解决。

你可能感兴趣的:(WEB服务器)