请教一下 Node.js 关于 require 的问题

2019 年 4 月 30 日
 zhanglintc

第一次使用 Node.js, 咨询一下...

使用 npm install -g 安装的模块会出现在 /usr/lib/node_modules 下对吧. 比如我安装了 npm install -g yargs, 就会出现 /usr/lib/node_modules/yargs 文件夹.

然后我使用 require ('yargs') 会报错, 我使用 require ('/usr/lib/node_modules/yargs') 就没问题.

我的理解不应该是全局的模块就不用给全路径啊, 是哪里设置不对吗? 是不是需要把全局的 node_modules 软连接到什么地方, 或者是添加一个什么设置让 Node.js 导入的时候可以找到这个全局文件夹?

2957 次点击
所在节点    问与答
14 条回复
vampuke
2019 年 4 月 30 日
全局不是这样用的吧
安装在项目里的才不需要给路径
IsaacYoung
2019 年 4 月 30 日
1. 建议本地安装
2. 模块查找机制 参考官方文档 从当前目录一直向上查找到根目录 /node_modules 并不会查找 /use/
zqx
2019 年 4 月 30 日
npm i xxx --save 装到项目根目录,可以在引用的时候自动找到根目录的 xxx 库
zhanglintc
2019 年 4 月 30 日
@zqx #3 根目录是哪里? 就是 '/' 这个目录么?
jybox
2019 年 4 月 30 日
SoloCompany
2019 年 4 月 30 日
installl -g 的模块,只有同样使用 -g 安装的模块可以默认 lookup 到
zhanglintc
2019 年 4 月 30 日
@jybox #5 最后做了个 ln -s /usr/lib/node_modules / 的软链接, 反正就可以随便 require 了.
noe132
2019 年 4 月 30 日
打开 node log module.paths 你就知道模块是从哪些目录解析的了
zhanglintc
2019 年 4 月 30 日
试了下调用 console.log(module.paths), 打出了一串地址, 跟大家说的和我想定的一致.

然后我 module.paths.push("/usr/lib/node_modules") 之后, 就可以 随便 require 了. 这就是我想要的效果, 临时添加一下任意路径, 就可以任意导入库了.

非常感谢.
zhanglintc
2019 年 4 月 30 日
@noe132 #8 参见 #9 楼
iamsee
2019 年 4 月 30 日
没设置全局环境变量吗
zhanglintc
2019 年 4 月 30 日
@iamsee #11 如果是全局环境变量怎么设置呢
iamsee
2019 年 5 月 1 日
lizhuoli
2019 年 5 月 2 日
@SoloCompany 之所以这样设计,是为了明确依赖。把开发本地环境和项目管理分离。假设你有两个人开发,一个人 require 了本地的模块,但是不在 package.json 中指定,另一个人自然运行报错。类似的概念可以拓展至各个语言和依赖管理,如 ruby bundle python virtualenv 等

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/560059

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX