Nodejs - 除非使用完整路径,否则无法导入模块

Nodejs - Cant import module unless use the full path

这里是 node.js 的新手;

我安装了它并尝试使用 w3 模块(在 windows 上)。

我已将我的全局存储库位置更改为:C:\Users\<user>\.node_modules_global 并使用下面的命令安装 web3 模块,它在 node_modules_global 文件夹中创建了一个新文件夹;:

npm install ethereum/web3.js --global

当我尝试 运行

Web3 = require('web3')它,我得到一个

Error: Cannot find module 'web3'

但是,如果我使用完整路径:

Web3 = require('C:\Users\<user>\.node_modules_global\node_modules\web3')

有效。 知道是什么导致了这个问题吗? (我已将 C:\Users\<user>\.node_modules_global 添加到 SYSTEM PATH)

谢谢

您在全局安装它,因此它保存在您的用户文件夹中,而不是在项目中,节点默认配置为在 node_modules 中查找。

解决此问题的两个选项:

  • (a) 改为在本地保存包
    • 只需使用 npm install ethereum/web3.jsnpm install ethereum/web3.js --save 即可将其安装到项目中的 node_modules 目录中。 (您必须先将 cd 放入您的项目文件夹!)
  • (b) 让 Node 默认在全局文件夹中查找
    • 使用"NODE_PATH": "C:\Users\<user>\.node_modules_global\node_modules"

如何在本地安装,以及如何在全局安装

  • 要在本地安装模块,只需执行 npm install my-module,或者如果您还想将其添加到 package.json,则执行 npm install my-module --save
  • 要全局安装模块,请使用 npm install my-module --global

何时使用本地和全局模块

你应该:

  • 如果您需要 require(),请在本地安装一个模块。
  • 如果要在命令行上 运行 全局安装一个模块。

来源:https://nodejs.org/en/blog/npm/npm-1-0-global-vs-local-installation/

更改节点路径

您可以将 NODE_PATH 环境变量设置为您自己的值,您的应用程序将默认查找那里,而不是项目 node_modules 目录。

看这里:http://nodejs.org/api/modules.html#modules_loading_from_the_global_folders