首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NextJS -导出中断(没有CSS,没有JS)

NextJS -导出中断(没有CSS,没有JS)
EN

Stack Overflow用户
提问于 2019-11-09 23:23:26
回答 5查看 7.5K关注 0票数 17

我使用的是NextJS (https://nextjs.org/)版本9.0.6。

我的next.config.js看起来是这样的:

代码语言:javascript
复制
/* eslint-disable */
const withLess = require("@zeit/next-less");
const lessToJS = require("less-vars-to-js");
const fs = require("fs");
const path = require("path");

// Where your antd-custom.less file lives
const themeVariables = lessToJS(
  fs.readFileSync(path.resolve(__dirname, "./assets/antd-custom.less"), "utf8")
);

module.exports = withLess({
  lessLoaderOptions: {
    javascriptEnabled: true,
    modifyVars: themeVariables // make your antd custom effective
  },
  webpack: (config, {
    isServer,
    defaultLoaders
  }) => {
    const originalEntry = config.entry;
    config.entry = async() => {
      const entries = await originalEntry();

      if (
        entries["main.js"] &&
        !entries["main.js"].includes("./polyfills.js")
      ) {
        entries["main.js"].unshift("./polyfills.js");
      }

      return entries;
    };

    config.module.rules.push({
      test: /\.scss$/,
      use: [
        defaultLoaders.babel,
        {
          loader: require("styled-jsx/webpack").loader,
          options: {
            type: "scoped",
            javascriptEnabled: true
          }
        },
        "sass-loader"
      ]
    });

    if (isServer) {
      const antStyles = /antd\/.*?\/style.*?/;
      const origExternals = [...config.externals];
      config.externals = [
        (context, request, callback) => {
          if (request.match(antStyles)) return callback();
          if (typeof origExternals[0] === "function") {
            origExternals[0](context, request, callback);
          } else {
            callback();
          }
        },
        ...(typeof origExternals[0] === "function" ? [] : origExternals)
      ];

      config.module.rules.unshift({
        test: antStyles,
        use: "null-loader"
      });
    }
    return config;
  }
});

我的package.json看起来是这样的:

代码语言:javascript
复制
{
  "name": "test",
  "version": "0.0.1beta",
  "scripts": {
    "dev": "next",
    "build": "next build",
    "start": "next start",
    "export": "next export"
  },
  "dependencies": {
    "@material/react-chips": "^0.15.0",
    "@zeit/next-less": "^1.0.1",
    "antd": "^3.24.3",
    "babel-plugin-import": "^1.12.2",
    "less": "3.10.3",
    "less-vars-to-js": "1.3.0",
    "next": "9.0.6",
    "null-loader": "3.0.0",
    "react": "^16.11.0",
    "react-country-flag": "^1.1.0",
    "react-device-detect": "^1.9.10",
    "react-dom": "^16.11.0",
    "react-proptypes": "^1.0.0",
    "react-redux": "^7.1.1",
    "react-string-replace": "^0.4.4",
    "redux": "^4.0.4",
    "redux-devtools-extension": "^2.13.8",
    "redux-persist": "^6.0.0"
  },
  "devDependencies": {
    "babel-eslint": "^10.0.3",
    "eslint": "^6.6.0",
    "eslint-config-airbnb": "^18.0.1",
    "eslint-plugin-babel": "^5.3.0",
    "eslint-plugin-import": "^2.18.2",
    "eslint-plugin-jsx-a11y": "^6.2.3",
    "eslint-plugin-react": "^7.16.0",
    "node-sass": "^4.13.0",
    "prettier": "^1.18.2",
    "prettier-eslint": "^9.0.0",
    "sass-loader": "8.0.0"
  },
  "license": "ISC"
}

我所做的:

-Deleted out和.next文件夹。

然后:

代码语言:javascript
复制
yarn build
yarn export

页面将被生成,但是它们被破坏了(CSS没有加载,没有Javascript)。

这在项目开始时起了作用,但不起作用。

在这里,有人知道为什么它会坏掉?

EN

回答 5

Stack Overflow用户

发布于 2021-08-07 09:51:57

我刚刚遇到了同样的问题,并谈到了这个问题。我认为Taha正确地解释了这个问题,但对我来说,next.config.js中的一小部分修改就成功了:

代码语言:javascript
复制
module.exports = {
  assetPrefix: './'
}

这个主题在NextJS文档中也有描述。

票数 33
EN

Stack Overflow用户

发布于 2021-01-06 00:11:11

最近,当我试图导出我的应用程序的静态版本时,我也遇到了同样的问题,而且在Next.js存储库中没有看到最近的问题,这让我感到惊讶。

实际上,在通过web服务器运行时,CSS/Js文件绝对路径的使用是正确的。在浏览器中作为本地文件运行时,您必须自己将它们更改为相对路径。

至于为什么Next.js团队不提供一个使用本地路径导出的选项,Tim (首席维护者)表示,在这个问题上“为了获得极小的收益,需要做大量的工作”。

票数 10
EN

Stack Overflow用户

发布于 2020-12-25 03:49:46

当我遇到同样的问题时,我发现了这个问题。

在您的index.html文件中(在out目录中),在文件的开头找到link标记:

代码语言:javascript
复制
<link
      rel="preload"
      href="/_next/static/css/d849fb1b42015bc13208.css"
      as="style"
/>

<link
      rel="stylesheet"
      href="/_next/static/css/d849fb1b42015bc13208.css"
      data-n-g=""
/>

只需在.属性的开头添加一个点“href”,如下所示:

代码语言:javascript
复制
<link
      rel="preload"
      href="./_next/static/css/d849fb1b42015bc13208.css"
      as="style"
/>
<link
      rel="stylesheet"
      href="./_next/static/css/d849fb1b42015bc13208.css"
      data-n-g=""
/>

这个帮我修好了。

我不知道为什么默认不包括".“。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58784444

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档