我想在引入 knex.js 方便在 App 端构造 SQL 用于 SQLite 的读写,我参考 https://ext.dcloud.net.cn/plugin?id=3460 里的插件写了一个适配当前版本的 knex.js Client 但是由于 knex.js 里有部分代码无可避免地 require 了 sqlite3、pg 等 node.js 上数据库驱动,所以我想把这些驱动的包都 alias 到某个空白函数里,因为实际代码里是肯定不会调用到的。
const { resolve } = require('path');
module.exports = {
chainWebpack: config => {
config.resolve.alias
.set('lodash$', 'lodash/lodash.min.js')
.set('fs$', resolve(__dirname, 'src/utils/dummyFs.js'));
['@vscode/sqlite3', 'better-sqlite3', 'mysql', 'mysql2', 'oracledb',
'pg', 'pg-query-stream', 'tedious'].forEach(lib => {
config.resolve.alias.set(lib + '$', 'lodash/noop.js');
});
}
};
但是实际打包(包括云打包、本地打包均会)的时候会提示以及设置好 alias 的包还是没有找到
[HBuilder] 18:03:34.140 项目 'recognize-agile'开始导出...
[HBuilder] 18:03:34.157 项目 'recognize-agile' 开始编译...
[HBuilder] 18:03:35.969 编译器版本:3.1.22(v3)详见:https://ask.dcloud.net.cn/article/36599。
[HBuilder] 18:03:35.970 正在编译中...
[HBuilder] 18:03:44.282 [警告] `..\node_modules\lodash\lodash.js` 文件体积超过 500KB,已跳过压缩以及 ES6 转 ES5 的处理,手机端使用过大的js库影响性能。
[HBuilder] 18:04:11.520 文件查找失败:'@vscode/sqlite3' at ..\node_modules\knex\lib\dialects\sqlite3\index.js:90
[HBuilder] 18:04:11.521 文件查找失败:'better-sqlite3' at ..\node_modules\knex\lib\dialects\better-sqlite3\index.js:49
[HBuilder] 18:04:11.542 文件查找失败:'mysql' at ..\node_modules\knex\lib\dialects\mysql\index.js:78
[HBuilder] 18:04:11.544 文件查找失败:'mysql2' at ..\node_modules\knex\lib\dialects\mysql2\index.js:55
[HBuilder] 18:04:11.560 文件查找失败:'oracledb' at ..\node_modules\knex\lib\dialects\oracledb\index.js:99
[HBuilder] 18:04:11.560 文件查找失败:'oracledb' at ..\node_modules\knex\lib\dialects\oracledb\utils.js:49
[HBuilder] 18:04:11.578 文件查找失败:'pg' at ..\node_modules\knex\lib\dialects\pgnative\index.js:58
[HBuilder] 18:04:11.579 文件查找失败:'pg' at ..\node_modules\knex\lib\dialects\postgres\index.js:132
[HBuilder] 18:04:11.595 文件查找失败:'pg' at ..\node_modules\knex\lib\dialects\redshift\index.js:96
[HBuilder] 18:04:11.596 文件查找失败:'pg-query-stream' at ..\node_modules\knex\lib\dialects\postgres\index.js:283
[HBuilder] 18:04:11.614 文件查找失败:'tedious' at ..\node_modules\knex\lib\dialects\mssql\index.js:142
[HBuilder] 18:04:32.824 DONE Build complete.
[HBuilder] 18:04:32.824 项目 'recognize-agile' 编译成功。
[HBuilder] 18:04:32.835 WARNING: Critical dependency: the request of a dependency is an expression
[HBuilder] 18:04:32.948 ERROR Build failed with errors.
[HBuilder] 18:04:32.959 项目 'recognize-agile'导出失败
而且也可以看到 lodash 的 alias 也是没有生效的,因为 lodash.min.js 只有 70+ KB,但是由于这个影响不大,所以也一直没有管。我翻找了一下 uni-app 相关的源码,发现 @dcloudio\vue-cli-plugin-hbuilderx\build\webpack.nvue.conf.js
里面有另一个 webpack 配置,我在里面加入 lodash 的 alias,可以发现该警告会消失。但是加入其他数据库驱动的 alias 并不能解决相关报错。但是似乎说明了 uni-app 打包的时候有不止一份 webpack 的配置?
所以想确认一下,app-plus 环境下用的是哪一份 webpack 配置?
1 个回复
DCloud_UNI_FXY
vue和nvue分别使用了不同的webpack配置