在这里记录下nodejs各种小细节
ch1 Modules
作为一个新世纪的前端,npm早已经是我们生活中必不可少的工具了
那么,这其中有多少奇怪的事情呢
1. 全局安装不等于全局require
初学nodejs的时,听闻npm i xxx
之后,便可以在项目中直接require使用了
又听闻有一个npm i xxx -g
的全局安装命令,下意识以为这样安装之后在任何地方都可以require
其实不然,这个-g
的意义更多的在于将nodejs写的命令行工具装在全局
这样就可以直接在命令行使用,而不需要敲全路径了
比如 npm i gulp -g
然后直接在命令行敲 gulp,就能使用它
如果想require全局的包,则需要设置 NODE_PATH 环境变量
指向nodejs全局安装路径的node_modules文件夹
window 目录:%USERPROFILE%\AppData\Roaming\npm\node_modules
2. 为什么要使用module.exports = xxx
,而不是 exports = xxx
我们可以使用如下语句导出一个模块
而不能使用exports = bar
因为nodejs将你的模块文件包裹成
其中exports
是module.exports
的引用
当我们改变exports
的属性时,修改的是module.exports
内存地址的对象
而当我们直接给exports
赋值时,仅仅只是将exports
指向的内存地址改变
而不会修改 module.exports
的指向
3. 解除modules缓存
我们知道nodejs会自动缓存require的模块,以防止多次require重复加载文件浪费性能
那如果我们的场景需要清除缓存,该怎么做呢?
其实nodejs的模块都缓存在require.cache
对象里面,模块的键都是其文件的绝对路径
而通过require.resolve(‘./module/name’)可以获取到模块绝对路径
就可以删除相对应模块的缓存