在我删除了packages.json,package-lock.json和node_modules后,.lodash如何继续工作?



我正在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用于解析模块的实际(伪代码)算法感兴趣,则可以在此处查看。

最新更新