We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
关键词:Webpack es6 产物
分别打包 ES5 和 ES6 产物(从一份 ES6 源码)
babel - loader
@babel/core
@babel/preset - env
npm install webpack webpack - cli babel - loader @babel/core @babel/preset - env --save - dev
webpack.config.js
const path = require("path"); module.exports = { entry: "./src/index.js", // 假设ES6源码入口文件是index.js output: { filename: "es6 - bundle.js", path: path.resolve(__dirname, "dist/es6"), }, module: { rules: [ { test: /\.js$/, exclude: /node_modules/, use: { loader: "babel - loader", options: { presets: [ [ "@babel/preset - env", { targets: { // 设置一个较高的浏览器版本支持ES6原生,这里假设现代浏览器都支持 chrome: "80", firefox: "70", }, }, ], ], }, }, }, ], }, };
webpack - merge
const path = require("path"); const webpackMerge = require("webpack - merge"); const baseConfig = { entry: "./src/index.js", output: { filename: "es6 - bundle.js", path: path.resolve(__dirname, "dist/es6"), }, module: { rules: [ { test: /\.js$/, exclude: /node_modules/, use: { loader: "babel - loader", options: { presets: [ [ "@babel/preset - env", { targets: { chrome: "80", firefox: "70", }, }, ], ], }, }, }, ], }, }; const es5Config = { output: { filename: "es5 - bundle.js", path: path.resolve(__dirname, "dist/es5"), }, module: { rules: [ { test: /\.js$/, exclude: /node_modules/, use: { loader: "babel - loader", options: { presets: [ [ "@babel/preset - env", { targets: { // 设置较低的浏览器版本,确保转换为ES5语法 chrome: "50", firefox: "40", }, useBuiltIns: "usage", corejs: 3, }, ], ], }, }, }, ], }, }; module.exports = [baseConfig, webpackMerge(baseConfig, es5Config)];
es5Config
targets
dist/es5
es5 - bundle.js
区分加载 ES5 还是 ES6 产物
index.html
Promise
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <title>Document</title> </head> <body> <script> if (typeof Promise === "undefined") { document.write('<script src="dist/es5/es5 - bundle.js"><\/script>'); } else { document.write('<script src="dist/es6/es6 - bundle.js"><\/script>'); } </script> </body> </html>
browserslist
browser - config.json
{"supportsES6": true}
{"supportsES6": false}
// 假设这是一个自定义脚本,用于生成browser - config.json const browserslist = require("browserslist"); const fs = require("fs"); const targets = { chrome: "50", firefox: "40", }; const browsers = browserslist(Object.keys(targets).map((browser) => `${browser} >= ${targets[browser]}`)); const supportsES6 = browsers.some( (browser) => browser.includes("Chrome >= 80") || browser.includes("Firefox >= 70") ); fs.writeFileSync("browser - config.json", JSON.stringify({ supportsES6 }));
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> </head> <body> <script> const browserConfig = JSON.parse(document.currentScript.getAttribute("data - config")); if (browserConfig.supportsES6) { document.write('<script src="dist/es6/es6 - bundle.js"><\/script>'); } else { document.write('<script src="dist/es5/es5 - bundle.js"><\/script>'); } </script> <script src="browser - config.json" data - config></script> </body> </html>
The text was updated successfully, but these errors were encountered:
No branches or pull requests
关键词:Webpack es6 产物
分别打包 ES5 和 ES6 产物(从一份 ES6 源码)
babel - loader
、@babel/core
和@babel/preset - env
。webpack.config.js
),并在其中配置基本的模块规则,用于处理 JavaScript 文件。先配置一个简单的 ES6 打包规则:webpack - merge
工具(需要安装webpack - merge
)来合并基础配置和 ES5 特定配置,避免重复配置。es5Config
部分重新定义了输出文件名和路径,并且在babel - loader
的选项中,通过@babel/preset - env
的targets
选项设置了较低的浏览器支持范围,这样就可以将源码转换为 ES5 语法并打包到dist/es5
目录下的es5 - bundle.js
文件。区分加载 ES5 还是 ES6 产物
index.html
)中,可以添加一段 JavaScript 代码来检测浏览器是否支持 ES6 特性。例如,检测Promise
是否存在(Promise
是 ES6 的一个典型特性)。browserslist
工具(@babel/preset - env
内部也使用了这个工具来确定目标浏览器)结合一些自定义脚本,在构建时确定目标浏览器范围,然后生成一个配置文件(例如browser - config.json
),内容可能是{"supportsES6": true}
或者{"supportsES6": false}
。在 HTML 文件中,通过读取这个配置文件来加载相应的产物。The text was updated successfully, but these errors were encountered: