NextJS - 意外的令牌导入错误

9
在将 react-syntax-highlighter 集成到我的 next-js 项目中时,我使用了以下代码:
import { Prism as SyntaxHighlighter } from "react-syntax-highlighter";
import { okaidia } from "react-syntax-highlighter/dist/esm/styles/prism";

...

<SyntaxHighlighter language="jsx" style={okaidia}>
{some code goes here}
</SyntaxHighlighter>

...

运行npm run dev时,如果直接运行页面,则会出现以下错误。
Unexpected token export
/Users/johndetlefs/repos/tal-gel-framework/node_modules/react-syntax-highlighter/dist/esm/styles/prism/index.js:1
(function (exports, require, module, __filename, __dirname) { export { default as coy } from './coy';
                                                              ^^^^^^

SyntaxError: Unexpected token export
    at createScript (vm.js:80:10)
    at Object.runInThisContext (vm.js:139:10)
    at Module._compile (module.js:617:28)
    at Object.Module._extensions..js (module.js:664:10)
    at Module.load (module.js:566:32)
    at tryModuleLoad (module.js:506:12)
    at Function.Module._load (module.js:498:3)
    at Module.require (module.js:597:17)
    at require (internal/module.js:11:18)
    at Object.react-syntax-highlighter/dist/esm/styles/prism (/Users/johndetlefs/repos/tal-gel-framework/.next/server/static/development/pages/components.js:7242:18)
    at __webpack_require__ (/Users/johndetlefs/repos/tal-gel-framework/.next/server/static/development/pages/components.js:23:31)
    at Module../pages/components.js (/Users/johndetlefs/repos/tal-gel-framework/.next/server/static/development/pages/components.js:6839:104)
    at __webpack_require__ (/Users/johndetlefs/repos/tal-gel-framework/.next/server/static/development/pages/components.js:23:31)
    at Object.3 (/Users/johndetlefs/repos/tal-gel-framework/.next/server/static/development/pages/components.js:7175:18)
    at __webpack_require__ (/Users/johndetlefs/repos/tal-gel-framework/.next/server/static/development/pages/components.js:23:31)
    at module.exports../js/config/libs/_theme-foundation--colors.js.config.themes.list.name (/Users/johndetlefs/repos/tal-gel-framework/.next/server/static/development/pages/components.js:91:18)

如果我通过另一个页面导航到该页面,一切都很好。但是如果我刷新页面,就会出现错误。 移除这行代码。
import { okaidia } from "react-syntax-highlighter/dist/esm/styles/prism";

去掉组件的style属性可以解决问题,但会使用默认的prism样式,这不是期望的结果。

我看到其他人也遇到了类似的问题,修复方法可能与next.js.config文件有关,以及如何在服务器端加载css文件,但我不确定该怎么做。

假设next.js.config文件是解决方案的一部分,以下是当前内容。

const withSass = require("@zeit/next-sass");
const withCSS = require("@zeit/next-css");

module.exports = withCSS(
  withSass({
    webpack(config) {
      config.module.rules.push({
        test: /\.(png|jpg|gif|svg|eot|ttf|woff|woff2)$/,
        use: {
          loader: "url-loader",
          options: {
            limit: 100000
          }
        }
      });
      config.module.rules.push({
        test: /\.svg$/,
        use: ["@svgr/webpack"]
      });
      return config;
    }
  })
);

我尝试了使用withCSS和不使用withCSS两种方式,但问题仍然存在。

非常感谢您的任何帮助!

1个回答

20

在搜索了一段时间后,我查看了npm软件包目录,并发现有两种类型的dists:cjs和esm。简单的解决方法就是使用cjs dist而不是esm dist

import { darcula } from 'react-syntax-highlighter/dist/cjs/styles/prism';

image

希望这可以帮到你:)


1
抱歉@Rotinx,我并不是故意要点踩的。但是它显示我的点踩已经被锁定,直到这篇文章被编辑过后才能更改,所以我会在它被编辑过后删除点踩并转为点赞。 - user11984600
1
哈哈,没问题,我很欣赏你的诚实,我已经批准了你的编辑。 - Rotinx
1
非常感谢!完美地工作了 :D - oschvr
1
这解决了我的问题! - coryetzkorn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接