【问题标题】:Webpack cannot find dist/style.cssWebpack 找不到 dist/style.css
【发布时间】:2021-12-02 13:57:21
【问题描述】:

使用 webpack-dev-server,我可以在根路径 (0.0.0.0:8080) 加载 ./dist/index.html 并在 0.0.0.0:8080/bundle.js 查看 ./dist/bundle.js。我尝试加载时收到 404 (0.0.0.0:8080/style.css)。

./dist 目录中的 CSS 是由运行 node-sass 的 npm 命令生成的,而不是使用 webpack。

dist/
 - index.html
 - bundle.js
 - style.css

webpack.config.js


    const path = require('path');
    const MiniCssExtractPlugin = require("mini-css-extract-plugin")
    const HtmlWebpackPlugin = require("html-webpack-plugin");
    
    module.exports = {
      entry: "./src/index.ts",
      mode: "development",
      module: {
        rules: [
          {
            test: /\.tsx?$/,
            use: "ts-loader",
            exclude: /node_modules/,
          },
          {
            test: /\.css$/,
            use: [
              MiniCssExtractPlugin.loader, // instead of style-loader
              'css-loader'
            ]
          },
        ],
      },
      resolve: {
        extensions: ['.tsx', '.ts', '.js'],
      },
      plugins: [
        new MiniCssExtractPlugin(
          { 
            filename: './style.css' 
            //also tried: path.resolve(__dirname, "dist", "style.css") 
          }),
        new HtmlWebpackPlugin({
          template: path.resolve(__dirname, "dist", "index.html"),
          inject: false
        })
      ],
      output: {
        filename: 'bundle.js',
        path: path.resolve(__dirname, 'dist')
      },
    };

(来自https://blog.jakoblind.no/css-modules-webpack/

我应该添加或更改什么,以便我的浏览器可以访问./dist/style.css 的 CSS 文件?

【问题讨论】:

    标签: webpack webpack-dev-server


    【解决方案1】:

    webpack-dev-server 实际上并不在磁盘上存储文件,它只是在运行中创建它们,然后将它们保存在内存中以响应 http 请求。所以默认情况下,它不会知道dist 中的任何内容;它只知道如何/在哪里提供它也可以生成的文件。

    但是,您可以将其配置为从磁盘提供其他现有文件(并观察它们的更改),方法是将其添加到您的 webpack 配置中。在 Webpack 5 中:

    devServer: {
      static: {
          directory: path.join(__dirname, 'dist')
      }
    }
    

    在 Webpack 4 中它被称为 contentBase:

    devServer: {
      contentBase: path.join(__dirname, 'dist'),
      watchContentBase: true
    }
    

    【讨论】:

    • 我希望我知道为什么 HtmlWebpackPlugin 似乎能够加载 dist/index.html 而无需添加 devServer 对象。
    • 我忘了提到我正在使用 Webpack 5,其中对 devServer.contentBase 的支持已被删除。根据您的建议,我能够使用devServer { static: { directory: path.resolve(__dirname, 'dist') } } 使其工作。我只是猜测static 是新的contentBase
    • 那是因为它的路径在 HtmlWebpackPlugin 配置中明确给出:path.resolve(__dirname, "dist", "index.html")。任何旧路径都可以在那里使用,它恰好是dist/index.html
    • 哦,我不知道它在 webpack 5 中被重命名了,干得好!我会编辑答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-06-10
    • 2015-06-08
    • 2020-05-16
    • 1970-01-01
    • 2019-12-26
    • 2018-06-11
    • 2021-10-07
    相关资源
    最近更新 更多