webpack-cli源码中import-local的作用是什么?

源码中这样写的

const importLocal = require("import-local");
// Prefer the local installation of webpack-cli
if (importLocal(__filename)) {
    // 这行我断点好多次, 根本不会进来
    return;
}

import-local 这个包我也看过了, 我的理解是 全局安装的包如果本地有安装,优先用本地

但是这个优先一直进不去啊

阅读 4.5k
2 个回答
新手上路,请多包涵

__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,这里肯定是不会进入执行的

新手上路,请多包涵

楼主,试想一下这种场景:
首先全局安装了 webpackwebpack-cli,本地项目也安装了 webpack(可以不安装) 和 webpack-cli
再者,本地目录下进行打包时,使用全局安装的 webpack/bin/webpack.jswebpack.js 执行完之后会执行全局 webpack-cli/bin/cli.js,注意:当执行到 importLocal 时,会查找本地是否存在 webpack-cli,如果有则执行本地的 webpack-cli/bin/cli.js,执行完之后返回 truly 值,则进入 if 条件语句中,return 终止执行(因为本地 webpack-cli 已经执行了,全局的不应该再次执行)。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题