我正在编写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。他们都没有改变结果。
1条答案
按热度按时间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 };|从“样式化组件”导入样式化;