我正在Windows 10系统上测试node.js
,我使用NPM
安装lodash
。我的目标是找出何时破裂。
我的应用程序由3行代码组成。
const _ = require('lodash');
var testArray = _.uniq([12, 5, 5, 2, 8, 12]);
console.log(testArray);
尝试1) package.json
包含此引用到lodash。
"dependencies": {"lodash": "^4.17.4"}
i删除了 package.json
typed app.js,但它仍然可以运行良好。
尝试2) package-lock.json
包含此引用到Lodash。
"dependencies": {"lodash": {"version": "4.17.4", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4="}
我删除了此文件,ran app.js,然后再次运行正常。
尝试3)是时候拉出大枪了。我删除了整个node_modules
文件夹。我运行了app.js,它仍然效果很好。圣牛是无敌的吗?
尝试4)我删除了引用lodash的第一行代码。
const _ = require('lodash');
终于app.js停止工作。
完成步骤1至3后,lodash
如何继续工作?这些消失后,它在哪里存储或引用?非常感谢您的任何帮助!
如果从本地node_modules
删除lodash
,则必须安装在其他地方(全球或NODE_PATH
,或在目录层次结构上)。
当require
尝试解析模块时,它首先在您的本地目录中查看node_modules
文件夹。如果找不到它,它将查看父目录以尝试找到它。如果在那里找不到它,它将一直沿目录层次结构上升。
此外,require
将在NODE_PATH
环境变量或以下特殊位置中列出的所有路径中寻找模块:
-
$HOME/.node_modules
-
$HOME/.node_libraries
-
$PREFIX/lib/node
其中$HOME
是您的主目录,而$PREFIX
由节点内部配置。
现在,我们可能不想搜索可以找到一个模块的每个可能的文件夹,因此节点具有有用的require.resolve
,它可以打印出找到模块的位置。请注意,它不会加载模块 - 它只会打印找到它的位置。
在您的情况下,请尝试以下操作:
console.log( require.resolve('lodash') ); // location where lodash was found
如果您对require
用于解析模块的实际(伪代码)算法感兴趣,则可以在此处查看。