javascript - 仅使用 Babel/Webpack 进行转译/polyfilling
问题描述
我有一个非常古老的 javascript 代码库,我不想使用现代方式使用标准 webpack 将所有 javascript 文件编译成一个,因为由于网站代码的编写方式,这是不可能的。
但我想使用现代 Javascript(例如 Promises 和 Fetch)编写新脚本,但仍然能够支持 IE11 等旧浏览器。
@babel/preset-env
我已经配置了 webpack 和 babel,因此它可以获得多个条目 javascript 文件,并且对于它们中的每一个,它使用and进行经典的转译/polyfilling corejs
。
这工作并根据 babel 目标配置填充每个脚本,但它会产生一个问题。它将全局变量/函数封装在脚本中,因此无法从引用它们的其他脚本访问它们(是的旧 javascript)。有没有办法禁用这种结构修改?
我也知道我可以只使用没有 Webpack 的 Babel,但问题是当我尝试 polyfill 例如 Fetch 时,我必须使用https://github.com/github/fetch,它不能只与 Babel afaik 一起使用。
任何帮助表示赞赏。
解决方案
我认为你的重构不可避免地会使代码现代化,如果你不小心,有一天你可能会用 webpack 捆绑所有东西;)
您描述的设置,我通过以下方式实现:
module.exports = {
entry: {
messages: "./src/messages",
"hello-world": "./src/hello-world",
},
output: {
library: {
type: "global",
},
filename: "[name].js",
},
};
每个文件的每个导出都直接放在window
- 如果您以正确的顺序加载文件,您可以在代码库中维护不可见的依赖关系。
对于此设置,您可以添加带有预设的 babel 加载程序,如您在问题中所述。此外,您可以开始跨不同文件进行显式导入 - 即使函数 X 在全局范围内可用,您也可以迁移某些地方以显式导入/要求它。
如果你想自己玩我的代码,你可以在这里找到它: https ://github.com/marcin-wosinek/webpack-legacy/
推荐阅读
- ios - SciChart Xamarin.iOS:PointMarker 点击事件
- chromium - 如何让 CefSharp WinFrom 32 位在 Windows 64 位上运行?
- python - 验证值在 Python 枚举值中
- html - angular 2在表格中动态添加带有文本框的新列
- jquery - Bootstrap Datetimepicker - 按回车时模糊()
- regex - 我有原始的 hexdump 数据。如何将可变长度与许多不同的分隔符匹配
- azure - Azure 存储静态网站安全问题
- python - 从python中的Json嵌套键获取唯一列表
- excel - Excel:如何在刷新所有连接之前暂停计算?
- php - 基于级别创建动态数组索引