rollup 如何处理动态的 require 呢?
发布于 2 年前 作者 daGaiGuanYu 3502 次浏览 来自 问答

我现在用 rollup 打包我的应用。 我的应用依赖 Knex,而 Knex 支持 mysql、sql server、oracle 等多种数据库, 因此 Knex 的代码中有 require('tedious')(sql server 的依赖)、require('oracledb')(oracle 的依赖)。 而我只需要 mysql,也只安装了 mysql。 而 rollup 打包后的文件,在最开始的地方就把 tedious、oracledb 等都导入了一遍……

问题复现 https://github.com/daGaiGuanYu/temp/tree/knex-rollup

10 回复

rollup 打包怎么会深入到 knex 模块里面去呢? 我也用 rollup 和 knex,没遇到这种情况

@waitingsong 我修改了原问题,添加了“问题复现”,https://github.com/daGaiGuanYu/temp/tree/knex-rollup

感谢帮助

服务端为啥用rollup打包呢?

@i5ting 我在做一个 vscode 插件,用到了 knex

如果是做服务端,应该用啥打包啊

@waitingsong 可以看一下你的配置文件吗

@daGaiGuanYu rollup 一般用于 npm 模块打包,项目打包一般是 webpack 或者直接用 typescript 的 tsc。 这个配置用于 npm 模块: 先用 tsc 把 ts 编译到为 js 文件,然后调用 rollup 打包为 cjs/esm 双输出 rollup.config.js

谢谢各位,rollup 应该确实不合适
webpack 应该可以,但决定试试新东西,用 esbuild。

@daGaiGuanYu CabloyJS全栈框架可以对后端模块进行打包。采用的webpack,需要对require进行特殊处理。详情见:CabloyJS全栈开发之旅(1):NodeJS后端编译打包全攻略

@daGaiGuanYu 如果要采用webpack打包node js代码,我提供的链接可以算是最佳实践之一了。你可以新建一个CabloyJS项目,然后再新建一个业务模块,执行模块后端代码的打包指令。要实现的效果其实与你所说的vscode插件场景还是比较契合的。参见:模块编译与发布

回到顶部