在删除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.jsontypes的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感兴趣,可以在这里查看 。