next.js 导入使用汇总创建的React库时出错

piah890a  于 2023-01-13  发布在  React
关注(0)|答案(1)|浏览(204)

我正在编写React/Next应用程序。我在应用程序外部创建了一个react accordion-component。我正在使用汇总创建一个包并将该包导入到我的应用程序中。当我运行应用程序时,我收到错误
./节点模块/@ zeilsell用户1/可折叠组件/dist/esm/index.js模块解析失败:意外标记(1:4)您可能需要适当的加载程序来处理此文件类型,当前没有配置加载程序来处理此文件。请参阅https://webpack.js.org/concepts#loaders,使用clientfunction getDefaultExportFromCjs(x){|返回x && x.__esModule &&Object.prototype.hasOwnProperty.call(x,'默认值')?x ['默认值']:x;|}
我不明白为什么我会看到这个错误。组件是ESM,那么为什么CSJ函数?Nexrjs使用webpack,但是应该可以处理CSJ,我找不到任何关于加载程序的信息。
我假设这个问题是在组件方面,所以我在下面包含了汇总,tsconfig和包文件。真的很感谢社区可以提供给我的任何帮助,因为我已经在这个问题上停留了很长时间。
我的汇总配置mjs

import {nodeResolve} from '@rollup/plugin-node-resolve';
import commonjs from "@rollup/plugin-commonjs";
import typescript from "rollup-plugin-typescript2";
import banner2 from "rollup-plugin-banner2";
import dts from "rollup-plugin-dts";

import packageJson from "./package.json" assert { type: "json" };

export default [
  {
    input: "src/index.ts",
    output: [
      {
        file: packageJson.module,
        format: "esm",
        sourcemap: true,
      },
    ],
    plugins: [
      nodeResolve({extensions: [".js", ".jsx", ".ts", ".tsx", ".json"], }),
      commonjs(),
      typescript({
        tsconfig: "./tsconfig.json",
        verbosity: 1,
        clean: true,
        include: ["*.ts+(|x)", "**/*.ts+(|x)"],
      }),
      banner2(() => `use client`),
    ],
  },
  {
    input: "dist/esm/index.d.ts",
    output: [{ file: "dist/index.d.ts", format: "esm" }],
    plugins: [dts()],
  },
];

我的tsconfig.json是

{
  "compilerOptions": {
    "target": "es2016",
    "lib": ["es6", "dom", "es2016", "es2017"],
    "jsx": "react-jsx",
    "module": "ESNext",
    "moduleResolution": "node",
    "declaration": true,
    "sourceMap": true,
    "outDir": "dist",
    "preserveConstEnums": true,
    "allowSyntheticDefaultImports": true,
    "esModuleInterop": true,
    "forceConsistentCasingInFileNames": true,
    "strict": true,
    "noImplicitAny": true,
    "strictNullChecks": true,
    "noImplicitThis": true,
    "noUnusedLocals": true,
    "noUnusedParameters": true,
    "noImplicitReturns": true,
    "noFallthroughCasesInSwitch": true,
    "skipLibCheck": true
  },
  "include": ["src/**/*.ts*"],
  "exclude": ["node_modules", "dist"]
}

并且package.json是

{
  "name": "@zeilsell-user1/accordion-component",
  "type": "module",
  "version": "0.0.5",
  "description": "This is a simple accordion component to be used with react/next apps",
  "author": "...>",
  "license": "MIT",
  "private": false,
  "main": "index.js",
  "module": "dist/esm/index.js",
  "files": [ "dist" ],
  "types": "dist/index.d.ts",
  "repository": "https://github.com/zeilsell-user1/accordion-component.git",
  "publishConfig": { "registry": "https://npm.pkg.github.com/zeilsell-user1" },
  "scripts": {

    "rollup": "rollup -c rollup.config.mjs",
    "rollup:watch": "rollup -cw",

  },
  "dependencies": {

  },
  "devDependencies": {
  }
}

我在谷歌上搜索了很多答案。我加了“类型”:“module”,按照一个网站的建议插入package.json。我还根据另一个建议切换到rollup.config.mjs中的nodeResolve。他们都没有改变结果。

py49o6xq

py49o6xq1#

经过大量的仔细梳理,我意识到如果我指定的是“type”:“module”,那么就没有必要包含“main”:“index.js”,因为这是cjs特有的。
这解决了cjs被应用程序而不是esm拾取的问题。它确实导致了另一个问题,如下所示,但这是一个“好”问题,因为它现在正在正确地拾取esm!
./节点模块/@ zeilsell用户1/可折叠组件/目录/esm/索引.js
模块解析失败:意外标记(1:4)
您可能需要适当的加载程序来处理此文件类型,当前未配置任何加载程序来处理此文件。请参阅https://webpack.js.org/concepts#loaders
使用“react/jsx-运行时”中的客户端导入{ jsxs,Fragment,jsx };|从“react”导入{ useState };|从“样式化组件”导入样式化;

相关问题