在删除packages.json,package-lock.json和node_modules之后,.lodash如何继续工作?
我正在testingWindows 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"}
我删除package.json
types的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="}
我删除这个文件,运行app.js,并再次运行良好。
尝试3)拔出大枪的时间。 我删除了整个node_modules
文件夹。 我跑了app.js,它仍然工作正常。 圣牛这个东西是无敌的吗?
尝试4)我删除了引用lodash的第一行代码。
const _ = require('lodash');
最后app.js停止工作。
在完成步骤1至3之后, lodash
如何继续工作? 那些消失后,它被存储或引用到哪里? 非常感谢您的帮助!
如果lodash
在将其从本地node_modules
删除之后仍然在node_modules
,则必须将其安装在其他位置(全局或NODE_PATH
或目录层次结构中)。
当require
尝试parsing模块时,它首先在本地目录中查找node_modules
文件夹。 如果找不到,它会查看父目录来尝试find它。 如果在那里找不到它,它将一直沿着目录层次结构继续前进。
此外, require
会在NODE_PATH
环境variables中列出的所有path或以下特殊位置查找模块:
-
$HOME/.node_modules
-
$HOME/.node_libraries
-
$PREFIX/lib/node
其中$HOME
是您的主目录,而$PREFIX
由Node内部configuration。
现在,我们可能不希望search模块可能位于的每个可能的文件夹,所以Node具有有用的require.resolve
,它打印find模块的位置。 请注意,它不加载模块 – 它只是打印find它的位置。
在你的情况下,试试这个:
console.log( require.resolve('lodash') ); // location where lodash was found
如果您对require
用来parsing模块的实际(伪代码)algorithm感兴趣,可以在这里查看 。