node.js - NextJS - 意外的 token 导入

标签 node.js webpack next.js

将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";

并从组件中删除样式属性可以修复所有问题,但使用默认的棱镜样式,这不是期望的结果。

环顾四周,我发现人们有类似的问题,并且修复可能与 next.js.config 文件以及 css 文件如何在服务器端加载有关,但我并没有 100% 在那里做什么。

假设 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,但问题仍然相同。

任何帮助将不胜感激! 👍

最佳答案

经过一番研究,我检查了 npm 包目录,发现有两种类型的 dist:cjs 和 esm。简单的修复方法就是使用 cjs dist 而不是 esm dist

从'react-syntax-highlighter/dist/cjs/styles/prism'导入{darcula};

image

希望这有帮助:)

关于node.js - NextJS - 意外的 token 导入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58966891/

相关文章:

node.js - es6-promise:httpntlm 模块中的 promisify

reactjs - Next.js/MSAL : Text does not match server-rendered html

next.js - 模块联合或微前端在 Next js 版本 12.2.0 中不起作用

javascript - 网址加载器与文件加载器 Webpack

javascript - 如何将每个 scss 文件编译到其自己的文件夹中而不将它们合并为一个?

javascript - 无法使用 ChakraUI 中的 useDisclosure() 在同一页面上使用两个模态

javascript - 如何创建 Mongoose 架构,将输入保存为 mongodb 中的 html

javascript - 在 Node.js 中逐行异步处理文件

javascript - 对于通过 require() 调用目标文件的命令行工具,我们如何安全地避免本地和全局 npm 包之间的冲突?

reactjs - 导入的 react node_module 中的 Typescript 编译错误,即使它被排除在 tsconfig.json 中