如何让webpack识别并处理require(变量)形式的上下文依赖
webpack处理Node.js应用上下文依赖的常见问题说明
我曾尝试将NestJS应用打包后在Lambda中运行但未成功,后续又对一个新建的、对接MySQL的NestJS应用做了同样的打包操作。问题出在Sequelize引入mysql2的方式上,相关代码逻辑如下:require(moduleName);
该逻辑会动态引入指定的数据库方言,此处对应的就是mysql2。但webpack本身无法处理这类动态引入逻辑,会直接打包失败。我按照官方建议完成修复后产生了新的疑问:webpack能不能直接替换指定文件中的特定代码行?或是模拟代码修改效果,将require(moduleName)识别为require('mysql2')?
现有类似场景的解决方案多针对浏览器环境,我的使用场景是针对Node.js环境的,需要处理的是webpack术语中的上下文依赖,即依赖请求是表达式而非固定字符串的情况。
以下几个webpack官方提供的插件均不适用于当前场景:
ContextReplacementPlugin:单个标识符的请求统一为.,无法区分不同请求NormalModuleReplacementPlugin:仅支持替换完整模块,不适用于上下文依赖场景DefinePlugin:仅支持替换全局常量,无法替换局部变量、函数参数等动态内容
如果需要了解Node.js应用的打包方案,可以参考社区相关的生产环境NestJS打包教程。本问题核心聚焦于webpack对上下文依赖的处理能力。
附言:虽然我找到了不需要处理上下文依赖的解决方案,但后续我或其他开发者仍有可能遇到同类场景。
更新
还有一种场景无法像NestJS+Sequelize+mysql2的情况那样绕开问题:sequelize-typescript会在运行时加载模型。
内容的提问来源于stack exchange,提问作者x-yuri
相关产品推荐
相关产品推荐

