30.Webpack-入口文件

2022-01-04  本文已影响0人  wo不是黄蓉

前言:我当前调试的webapck版本是5.58.1,不知道怎么开始调试的看过来->调试方法

准备工作:

接下来,进入正文...

首先执行webpack命令,执行的是node_modules.bin\webpack./node_modules/.bin/webpack这个shell脚本,这个脚本去调用./node_modules/webpack/bin/webpack.js并追加输入参数,生成最终的配置文件。

const path = require("path");
    const pkgPath = require.resolve(`${installedClis[0].package}/package.json`);
    // eslint-disable-next-line node/no-missing-require
    const pkg = require(pkgPath);
    // eslint-disable-next-line node/no-missing-require
//引入webpack-cli模块->接下来进入到webpack-cli/cli.js文件中
    require(path.resolve(
        path.dirname(pkgPath),
        pkg.bin[installedClis[0].binName]
    ));
//自定义的配置文件内容
const firstOptions = [].concat(options)[0];
//命令行传参内容
let outputOptions = options.stats;
//最终会合并配置项,将所有的配置项合并到options中
//引入webpack->用来创建一个compiler
const webpack = require("webpack");
//将所有的配置项传入
compiler = webpack(options);
let compiler;
compiler = new Compiler(options.context);
compiler.options = options;
//盲猜是对插件的操作-遍历所有的插件
        if (options.plugins && Array.isArray(options.plugins)) {
            for (const plugin of options.plugins) {
                if (typeof plugin === "function") {
                    plugin.call(compiler, compiler);
                } else {
                    //讲plugin的this绑定到compiler上
                    plugin.apply(compiler);
                }
            }
        }
//最后执行compiler.run方法
compiler.run(callback);

结论:webpack打包,其实就是使用webpack函数来接收config,然后调用run方法。

最后证明一下确实是走了这么一个流程:

在刚才的项目下新建一个run.js文件,运行node run.js会打印出来11111

//引入webpack和配置信息
const webpack = require("webpack");
const config = require("./webpack.config");
//调用webpack方法,传入配置信息

const compiler = webpack(config);
//调用compiler.run方法
compiler.run((err, stats) => {
  console.log(11111);
});

image-20220104222023493.png

想直接扒代码的同学->git链接

上一篇下一篇

猜你喜欢

热点阅读