uni-app 4.28版本打包引用commonjs规范的第三方库项目报错 import*as commonjsHelpers
uni-app 4.28版本打包引用commonjs规范的第三方库项目报错 import*as commonjsHelpers
示例代码:
附件内有项目模板,下载依赖后打包即可复现
操作步骤:
点击发行就编译失败
预期结果:
应正常编译打包
实际结果:
打包报错
bug描述:
打包时报错
import * as commonjsHelpers from xxxxx
初步怀疑是这个版本升级了vite相关依赖导致无法编译使用了commonjs规范的第三方库
| 开发环境 | 版本号 | 项目创建方式 |
|----------------|--------|--------------|
| Windows | win10 | HBuilderX |
| HBuilderX | 4.28 | |
| Chrome | 126.0.2592.102 | |
下载附件,解压出json.js,替换HBuilderX/plugins/uniapp-cli-vite/node_modules/@dcloudio/uni-cli-shared/dist/vite/plugins/json.js,然后试试
替换了不起作用
回复 小新的狗叫小白: 你是HBuilderX项目吗?如果是cli项目,需要替换自己项目node_modules/@dcloudio/uni-cli-shared/dist/vite/plugins/json.js
回复 DCloud_UNI_FengXY: 替换后换了个报错 “traverse” is not exported by “node_modules/@vue/reactivity/dist/reactivity.esm-bundler.js”, imported by “node_modules/@vue/runtime-core/dist/runtime-core.esm-bundler.js”.
回复 小新的狗叫小白: 发测试工程
在处理uni-app 4.28版本打包时引用CommonJS规范的第三方库项目报错的问题时,通常涉及到模块解析和打包配置。uni-app默认支持ES6模块规范,对于CommonJS规范的库可能需要额外的配置或处理。以下是一个可能的解决方案,通过配置webpack来支持CommonJS规范的库。
配置Webpack以支持CommonJS
虽然uni-app直接暴露的webpack配置较少,但你可以通过vue.config.js
文件或修改manifest.json
中的mp-webpack-chain
配置来间接影响webpack的行为。这里我们假设你能够通过某种方式访问或修改webpack配置。
1. 自定义Webpack配置(如果可能)
如果你能够访问vue.config.js
文件,可以尝试添加对CommonJS模块的支持:
// vue.config.js
const webpack = require('webpack');
module.exports = {
configureWebpack: config => {
// 添加对node_modules中CommonJS模块的支持
config.resolve.symlinks(true);
config.module.rules.push({
test: /\.js$/,
include: /node_modules/,
use: {
loader: 'babel-loader',
options: {
presets: ['@babel/preset-env'],
plugins: [
// 必要的babel插件
],
},
},
});
// 确保webpack能够正确解析CommonJS模块
config.plugins.push(
new webpack.ProvidePlugin({
// 你可以根据需要添加更多的库
$: 'jquery',
jQuery: 'jquery',
})
);
},
};
2. 修改manifest.json
中的mp-webpack-chain
(如果适用)
对于uni-app,更常见的是通过修改manifest.json
中的mp-webpack-chain
配置来影响webpack链式配置:
// manifest.json
{
"mp-webpack-chain": {
"chainWebpack": (chain) => {
chain.resolve.symlinks(true);
chain.module
.rule('commonjs')
.test(/\.js$/)
.include.add(/node_modules/)
.end()
.use('babel-loader')
.loader('babel-loader')
.options({
presets: ['@babel/preset-env'],
// 其他babel配置
});
}
}
}
注意
- 上述代码示例是基于可能的webpack配置修改,实际使用时可能需要根据uni-app的具体版本和webpack配置进行调整。
- uni-app的打包流程可能会随着版本更新而变化,确保查阅最新的官方文档或社区资源以获取最新的配置信息。
- 如果上述方法不适用,考虑在官方社区或GitHub仓库中搜索类似问题或提出issue。