6

我在一个项目中使用 Webpack 4,到目前为止我只需要编译和捆绑样式。没有Javascript。

这是我的配置:

const path = require('path');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');

module.exports = {
  entry: {
    'css/bundle': path.resolve(__dirname, 'static/scss/index.scss'),
  },
  output: {
    path: path.resolve(__dirname, 'static'),
  },
  module: {
    rules: [
      {
        test: /\.s[ac]ss$/,
        include: path.resolve(__dirname, 'static/scss'),
        use: [MiniCssExtractPlugin.loader, 'css-loader', 'sass-loader'],
      },
    ],
  },
  plugins: [
    new MiniCssExtractPlugin(),
  ],
};

问题是它输出了两个文件:bundle.css 和 bundle.js。有没有办法配置 Webpack 使其不输出 Javascript 包?我尝试浏览文档,尝试了十几种不同的方法,但并没有真正奏效。

这里的一个重要注意事项是,如果我删除 css-loader,捆绑会失败。因此,虽然 css-loader 最有可能负责输出 bundle.js 文件,但我并不完全确定如何避免使用它。

4

4 回答 4

5

webpack-extraneous-file-cleanup-plugin对 webpack 4.12.0 无效。

我可以建议使用on-build-webpack 插件手动删除bundle.js

var WebpackOnBuildPlugin = require('on-build-webpack');

// ...

plugins: [
    // ...

    new WebpackOnBuildPlugin(function () {
        fs.unlinkSync(path.join('path/to/build', 'bundle.js'));
    }),
],
于 2018-07-22T11:57:08.653 回答
1

不幸的是,这正是 webpack 当前的工作方式。然而,我们并不孤单!有一个插件可以清理任何不需要的文件:

安装插件:

yarn add webpack-extraneous-file-cleanup-plugin -D

然后在你的配置中:

const ExtraneousFileCleanupPlugin = require('webpack-extraneous-file-cleanup-plugin');

plugins: [
  new ExtraneousFileCleanupPlugin({
    extensions: ['.js'],
    minBytes: 1024,
    paths: ['./static']
  }),
]
于 2018-05-21T15:05:34.693 回答
1

2021 年 3 月:

在 Webpack 5 中,on-build-webpack插件对我不起作用。

我找到了这个:

Webpack Shell 插件 Next

我正在做的项目是使用 Webpack 5 作为 CSS 模式库的构建工具。因此,我们不需要main.js在我们的dist.

npm i -D webpack-shell-plugin-next

然后在webpack.config.ts(仅显示相关部分):

import WebpackShellPluginNext from "webpack-shell-plugin-next";

module.exports = {
    output: {
        path: path.resolve(__dirname, "static/dist")
    },
    plugins: [
        // Run commands before or after webpack 5 builds:
        new WebpackShellPluginNext({
            onBuildEnd: {
                scripts: [
                    () => {
                        fs.unlinkSync(path.join(config.output.path, "main.js"));
                    }
                ]
            }
        })
    ]
};

export default config;
于 2021-03-31T05:19:07.387 回答
0

我只是用 rm in 删除不需要的输出package.json

"scripts": {
    "build": "npm run clean && webpack -p && rm ./dist/unneeded.js"
 },
于 2018-08-30T12:25:28.477 回答