(补充:这里似乎是 vite 构建前检查的问题,没有最小 .mts
包导致搜索到 .min.js
去了;而 npm run tauri dev
没问题是因为这一步用不到 vite。由于 rewrite
仅在一个地方用到,这里就改了一下 oniguruma-to-js
库中引入 regex
的部分,将 import { rewrite } from 'regex'
改成 import * as regex from 'regex'
,后面改成 regex.rewrite
,算是个治标不治本的方法)
以下为问题原文:
(已经问过 AI,试过了都不行)
Vue3 使用 npm 构建,代码风格为 typescript。其中引入了 Shiki
包,在 Shiki
的依赖 oniguruma-to-js
构建时报错。
在 npm run dev
阶段可以运行,代码功能全部正常;随后进行 npm run build
时出现:
RollupError: "rewrite" is not exported by "node_modules/regex/dist/regex.min.js", imported by "node_modules/oniguruma-to-js/dist/shared/oniguruma-to-js.2969e22d.mjs".
即依赖 regex
没有默认导出 rewrite
,但是报错位置变成了 dist/regex.min.js
,也就是 build 时没有使用 types/regex.d.ts
(编辑器中的代码提示是链接到 types/regex.d.ts
的)。检查了 regex 的构建命令:
{
...
"exports": {
".": {
"types": "./types/regex.d.ts",
"import": "./dist/regex.mjs",
"require": "./dist/regex.cjs"
}
},
"browser": "./dist/regex.min.js",
"types": "./types/regex.d.ts",
"sideEffects": false,
"scripts": {
"bundle:global": "esbuild src/regex.js --global-name=Regex --bundle --minify --sourcemap --outfile=dist/regex.min.js",
"bundle:esm": "esbuild src/regex.js --format=esm --bundle --sourcemap --outfile=dist/regex.mjs",
"bundle:cjs": "esbuild src/regex.js --format=cjs --bundle --sourcemap --outfile=dist/regex.cjs",
"types": "tsc src/regex.js --rootDir src --declaration --allowJs --emitDeclarationOnly --outDir types",
"prebuild": "rm -rf dist/* types/*",
"build": "npm run bundle:global && npm run bundle:esm && npm run bundle:cjs && npm run types",
"pretest": "npm run build",
"test": "jasmine && tsc --project spec/types/tsconfig.test.json",
"prepare": "npm test"
},
...
}
这一部分应该没问题。按照建议在 tsconfig.json
的 compilerOptions
中修改:
"esModuleInterop": true,
也不生效。
你的问题是由于依赖包之间的导出不兼容导致的。
确保
oniguruma-to-js
和regex
的版本是最新的:尝试直接从
regex
导入所需的功能,而不是从regex.min.js
:如果使用了
Rollup
打包,在Rollup
配置中添加内容,确保正确处理模块导入:确保
tsconfig.json
包含以下设置,支持ES
模块和默认导入:清理并重建项目,删除
node_modules
文件夹和package-lock.json
文件,然后重新安装依赖:你可以考虑查看日志:
或者逐步注释代码行,非常好用,找出导致构建失败的代码行。