WebPack在构建开始之前执行函数

Ama*_*may 4 javascript synchronization build-process build webpack

我需要在Webpack开始构建过程之前执行一个JavaScript函数.该函数只接受.scss文件并将它们连接成一个.

之后,Webpack应该获取结果文件.有没有选择呢?

目前,我运行前的功能module.exportswebpack.config.js,但是似乎它的不同步操作.Module.exports在concat()函数结束之前执行,Webpack找不到.scss文件.

function concat(opts) {
  (...)
}

concat({ src : styles,  dest : './css/style.scss' });

module.exports = [
   (...)
] 
Run Code Online (Sandbox Code Playgroud)

Luc*_*oli 12

您可以使用编译器挂钩在构建的任何阶段添加任何代码。

编译钩子在编译开始之前(以及每次)被调用,所以你可能想使用它

config = {
    //...
    plugins: [
        {
            apply: (compiler) => {
                compiler.hooks.compile.tap("MyPlugin_compile", () => {
                    console.log("This code is executed before the compilation begins.");
                });
            },
        },
    ],
    //...
};
Run Code Online (Sandbox Code Playgroud)


Emi*_*erg 10

在运行Webpack之前连接scss文件似乎有点奇怪,因为这些操作通常由Webpack本身处理.

话虽如此,有一些方法可以解决这个问题.

最明显的方法是将concat部件提取到单独的文件(例如prepare.js),然后通过沿着这条线运行一些东西来启动构建过程:node prepare.js && webpack.那将首先运行准备,如果退出没有错误webpack将运行.通常,这将被添加到scriptspackage.json 的部分,例如

"scripts": {
  "build": "node prepare.js && webpack"
}
Run Code Online (Sandbox Code Playgroud)

为了实现相同的目标,但是以更多的Webpack集成方式,你可以做同样的事情,你将concat部分提取到一个单独的文件,然后让Webpack在构建开始之前,在Webpack Shell插件的帮助下执行该文件,例如

const WebpackShellPlugin = require('webpack-shell-plugin');
module.exports = {
  ...
  plugins: [
    new WebpackShellPlugin({
      onBuildStart:['node prepare.js']
    })
  ],
  ...
}
Run Code Online (Sandbox Code Playgroud)

  • 请注意,webpack-shell-plugin无法与webpack的--watch标志一起使用:https://github.com/1337programming/webpack-shell-plugin/issues/60 (2认同)