源码中这样写的
const importLocal = require("import-local");
// Prefer the local installation of webpack-cli
if (importLocal(__filename)) {
// 这行我断点好多次, 根本不会进来
return;
}
import-local
这个包我也看过了, 我的理解是 全局安装的包如果本地有安装,优先用本地的
但是这个优先
一直进不去啊
源码中这样写的
const importLocal = require("import-local");
// Prefer the local installation of webpack-cli
if (importLocal(__filename)) {
// 这行我断点好多次, 根本不会进来
return;
}
import-local
这个包我也看过了, 我的理解是 全局安装的包如果本地有安装,优先用本地的
但是这个优先
一直进不去啊
楼主,试想一下这种场景:
首先全局安装了 webpack
和 webpack-cli
,本地项目也安装了 webpack
(可以不安装) 和 webpack-cli
;
再者,本地目录下进行打包时,使用全局安装的 webpack/bin/webpack.js
,webpack.js
执行完之后会执行全局 webpack-cli/bin/cli.js
,注意:当执行到 importLocal
时,会查找本地是否存在 webpack-cli
,如果有则执行本地的 webpack-cli/bin/cli.js
,执行完之后返回 truly
值,则进入 if
条件语句中,return
终止执行(因为本地 webpack-cli
已经执行了,全局的不应该再次执行)。
5 回答4.8k 阅读✓ 已解决
4 回答2.5k 阅读✓ 已解决
2 回答1.7k 阅读✓ 已解决
2 回答1.3k 阅读✓ 已解决
3 回答2k 阅读
5 回答1.9k 阅读
1 回答3.2k 阅读
__filename: 总是返回被执行的 js 的绝对路径
这里等于Users/XXX/.../youProject/node_modules/webpack-cli/bin/cli.js
看 import-local 的源码就会知道,import-local 实际上是把 webpack-cli/bin/cli.js 进行一次 path.join("webpack-cli", "bin/cli.js"),得到一个所谓的本地路径,然后再把__filename 和这个本地路径求一次相对路径,如果相对路径是一个空字符串,则代表本地没有其它可以访问的 webpack-cli cli.js, 此时 importLocal(__filename) 返回 null,如果本地没有其它的 webpack-cli,这里肯定是不会进入执行的