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

Posted

技术标签:

【中文标题】Nodejs - 除非使用完整路径,否则无法导入模块【英文标题】:Nodejs - Cant import module unless use the full path 【发布时间】:2018-04-20 03:58:38 【问题描述】:

这里是 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\\&lt;user&gt;\\.node_modules_global 添加到系统路径)

谢谢

【问题讨论】:

你的 node_modules 环境路径设置为什么? Nodejs cannot find installed module on Windows?的可能重复 您需要在本地安装,而不是全局安装 ;) 只需删除 -g 标志 检查这个:***.com/questions/15636367/… 【参考方案1】:

你在全局安装它,所以它被保存到你的用户文件夹中,而不是在项目中,并且节点默认配置为查看node_modules

解决此问题的两个选项:

(a) 在本地保存包 仅使用npm install ethereum/web3.jsnpm install ethereum/web3.js --save 将其安装到项目中的node_modules 目录。 (您必须先 cd 到您的项目文件夹!) (b) 让 Node 默认在全局文件夹中查找 使用"NODE_PATH": "C:\\Users\\&lt;user&gt;\\.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

【讨论】:

有趣 - 如果我知道我会多次使用同一个包,我会尽量避免本地安装。你说的似乎有效,我只是收到一条消息:npm WARN saveError ENOENT: no such file or directory, open 'C:\git\Crypto\samples\eth1\package.json' 我应该担心吗?谢谢 这个警告可以通过创建一个 package.json 来修复,尝试破坏 npm init 它会为你做一个 :) 这只是一个警告,而不是一个错误,所以没什么大不了的. package.json 用于跟踪您的所有依赖项,请参见此处:docs.npmjs.com/files/package.json

以上是关于Nodejs - 除非使用完整路径,否则无法导入模块的主要内容,如果未能解决你的问题,请参考以下文章

除非刷新页面,否则React loadable无法在每个新构建上加载组件

Create React App 显示“除非提供 '--jsx' 标志,否则无法使用 JSX”

除非手动保存,否则无法使用 SSIS 打开 excel 文件

除非刷新,否则谷歌地图无法正确显示

构建:除非提供“--jsx”标志,否则无法使用 JSX

出现错误 TS17004:除非提供了“--jsx”标志,否则无法使用 JSX