javascript - React/Webpack:如何通过代码清理使动态导入/要求依赖于变量?
问题描述
我已经使用最新的 react 16.12 和 Webpack 创建了由“react-create-app”创建的应用程序
我需要依赖变量进行导入,例如:
if (process.env.SOMEVAR === "a1") Routes = require("./xxx").default;
if (process.env.SOMEVAR === "a2") Routes = require("./yyy").default;
if (process.env.SOMEVAR === "a3") Routes = require("./zzz").default;
运行命令:set "SOMEVAR=a1" && npm run build
这段代码将main.chunk.js
与这3个模块xxx
//里面,没有yyy
依赖zzz
SOMEVAR
我意外地发现,当我使用NODE_ENV
变量名时 -它就像我需要的那样工作!例子:
if (process.env.NODE_ENV === "production") Routes = require("./xxx").default;
if (process.env.NODE_ENV === "development") Routes = require("./yyy").default;
if (process.env.NODE_ENV === "test") Routes = require("./zzz").default;
运行命令:set "NODE_ENV=production" && npm run build
此代码将main.chunk.js
仅包含 xxx 模块!
问题:如何使任何其他变量具有相同的效果,而不是NODE_ENV
(我需要在内部构建仅在我之后使用的模块if
)?这个怎么运作?我在“WebPack docs”中找不到有关此效果的任何信息。
解决方案
从提供的示例中,我认为这不是最好的方法。
您可以定义一个动态插件,将自定义全局变量公开给构建。添加到您的 webpack 插件配置中,例如:
new webpack.DefinePlugin({
EnabledRoutes: {
testing: true,
production: true,
development: true
}
})
通过这种方式,您可以使用流程环境或读取构建配置,如下所示:
new webpack.DefinePlugin({
EnabledRoutes: {
testing: process.env.ROUTES_TESTING,
production: Config.routes.production,
development: true
}
})
并且直接在客户端路由器中,您可以检查以添加其他路由:
if(EnabledRoutes.testing)
{
APPEND routes.
}
或者
if (EnabledRoutes.testing) Routes = require("./xxx").default;
推荐阅读
- rust - 如何通过 Rust 宏将表达式中的一个标识符替换为另一个标识符?
- model-checking - UPPAAL SMC 避免状态空间爆炸
- java - 如何从 Zip 文件中提取 Json 数据并将提取的 Json 文件发送到前端?
- swift - 如何制作自定义 NSDatePickerCell 以更改选择颜色?
- html - 为什么 django 不使用拖放文件上传重定向到新的 url?
- powerbi - PowerBI - 将列函数与度量相结合
- flutter - 如何创建一个新的其他流流,返回所有发出的值的列表(块模式)?
- r - 如何在 ggplot2 中对堆叠条进行分组并修改某些值的颜色?
- python - 多个 func.count().filter() 会多次扫描数据库吗?
- c# - 如何修复 taskScheduler OnUnobservedException xamarin 表单?