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

2019-04-30 12:13:13 +08:00
 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 导入的时候可以找到这个全局文件夹?

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

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

非常感谢.
zhanglintc
2019-04-30 17:58:08 +08:00
@noe132 #8 参见 #9 楼
iamsee
2019-04-30 19:58:18 +08:00
没设置全局环境变量吗
zhanglintc
2019-04-30 22:21:42 +08:00
@iamsee #11 如果是全局环境变量怎么设置呢
iamsee
2019-05-01 20:28:17 +08:00
lizhuoli
2019-05-02 12:57:50 +08:00
@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