mze*_*ler 2 javascript node.js
我有一个名为的小节点脚本/tmp/test.js包含:
console.log(require("w3cjs"));
Run Code Online (Sandbox Code Playgroud)
如果我从命令提示符执行此操作:
nvm use v0.10.21
node /tmp/test.js
Run Code Online (Sandbox Code Playgroud)
我得到这个输出:
module.js:340
throw err;
^
Error: Cannot find module 'w3cjs'
at Function.Module._resolveFilename (module.js:338:15)
at Function.Module._load (module.js:280:25)
at Module.require (module.js:364:17)
at require (module.js:380:17)
at Object.<anonymous> (/tmp/test.js:1:75)
at Module._compile (module.js:456:26)
at Object.Module._extensions..js (module.js:474:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Function.Module.runMain (module.js:497:10)
Run Code Online (Sandbox Code Playgroud)
但如果我这样做:
node -e $(cat /tmp/test.js)
Run Code Online (Sandbox Code Playgroud)
我得到这个输出:
{ validate: [Function: validate],
setW3cCheckUrl: [Function: setW3cCheckUrl],
w3cjs: [Circular] }
Run Code Online (Sandbox Code Playgroud)
(换句话说 - 它有效.)
为什么差异以及如何使脚本工作?
当您在其他目录中运行脚本时,Node会在该node_modules脚本目录的文件夹中查找本地模块.
假设您的shell的工作目录是当前的/projects/foo.运行时node /tmp/test.js,Node会查找模块/tmp/node_modules,而不是/projects/foo/node_modules.
但是,如果您不运行脚本文件,但在命令行上运行一些文本-e,则Node将检查shell当前工作目录中的本地模块文件夹,即/projects/foo/node_modules.
您似乎已w3cjs安装在工作目录中,但未安装在/tmp.您应该有安装,或者在全球安装模块npm的-g选项.
| 归档时间: |
|
| 查看次数: |
3845 次 |
| 最近记录: |