【问题标题】:Css not loading in production mode when using nextjs使用 nextjs 时 Css 未在生产模式下加载
【发布时间】:2021-04-14 01:38:41
【问题描述】:

问题

在构建和启动我们的应用程序的生产构建时,不会加载任何 css。检查开发工具,我可以看到无数错误和警告:

可能的罪魁祸首

在开发模式下启动应用程序时,我没有遇到任何这些问题。此外,图像或字体等其他资产也已正确加载。我们使用 scss 并像这样在 _app.tsx 中导入全局样式表:

import "../styles/globals.scss";

为了解决另一个库的问题,我们必须设置一个自定义 webpack 配置:

module.exports = phase => ({
  webpack: (config, { isServer }) => {
    config.module.rules.push({
      test: /\.node$/,
      use: "node-loader"
    });

    config.module.rules.push({
      test: /\.(ts|js)x?$/,
      use: [
        {
          loader: "ts-loader",
          options: {
            transpileOnly: true,
            experimentalWatchApi: true,
            onlyCompileBundledFiles: true
          }
        }
      ],
      include: [path.resolve(__dirname, "node_modules/@private/")],
      exclude: [path.resolve(__dirname, "node_modules/@private/src/styleguide")]
    });

    if (!isServer) {
      config.module.rules.push({
        test: /\.s?[ac]ss$/i,
        use: [
          { loader: "style-loader" },
          { loader: "css-loader" },
          {
            loader: "resolve-url-loader",
            options: { removeCR: true, debug: true }
          },
          { loader: "sass-loader" }
        ]
      });
    }

    config.module.rules.push({
      test: /\.(png|jpe?g|gif)$/i,
      use: [
        {
          loader: "file-loader",
          options: {
            name: "[name].[ext]",
            exclude: /node_modules/
          }
        }
      ],
      exclude: [path.resolve(__dirname, "node_modules/@private/src")]
    });

    return config;
  }
});

另外,这是我们用于在生产模式下启动应用程序的自定义服务器的文件:

const PORT = parseInt(process.env.PORT, 10) || 3364;
const dev = process.env.NODE_ENV !== "production";
const app = next({ dev });
const handle = app.getRequestHandler();

app.prepare().then(() => {
  const server = express();

  server.get("*", (req, res) => handle(req, res));

  server.listen(PORT, err => {
    if (err) throw err;
    console.log(`???? => Ready on http://localhost:${PORT}`);
  });
});

假设

由于自定义服务器是生产和开发之间的唯一区别,我只能假设错误可能在某处。但对我来说看起来不错。因此,如果有人有任何提示或想法,我将非常感激。

【问题讨论】:

  • isServer 的值是多少?
  • @AmareshSM 来自文档:“webpack 函数执行两次,一次用于服务器,一次用于客户端。这使您可以使用 isServer 属性区分客户端和服务器配置”。
  • 所以你没有在生产模式下使用 style-loader,css-loader?
  • @AmareshSM,不,我不在服务器上使用它。我只是尝试删除它并收到错误ReferenceError: document is not defined

标签: css webpack sass next.js webpack-style-loader


【解决方案1】:

好的,在通过npm run build 构建生产版本之前,我刚刚删除了 .next 文件夹,之后一切正常。当 .next 文件夹存在时,似乎块生成存在一些问题。

【讨论】:

  • 确实有效。 next build 时,我也遇到了 CSS 无法加载的问题。你救了我的命。
猜你喜欢
  • 1970-01-01
  • 2020-10-02
  • 2019-12-15
  • 1970-01-01
  • 1970-01-01
  • 2011-08-02
  • 2020-06-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多