Использование useBuiltIns: "usage"
Вам необходимо обычно импортировать модули, которые вы хотите использовать ( ig Postmate ), внутри файла ввода кода; нет полифилов; каждый использованный полифилл будет обработан соответственно @babel/preset-env
. Кроме того, версия corejs
в @babel/preset-env
должна содержать одно число (, т. Е. 3
или 2
).
Содержимое babel.config.js
:
module.exports = function (api) {
api.cache(true);
const presets = [
[
'@babel/preset-env',
{
corejs : {
version : "3",
proposals : true
},
useBuiltIns: 'usage',
targets: {
browsers: [
"edge >= 16",
"safari >= 9",
"firefox >= 57",
"ie >= 11",
"ios >= 9",
"chrome >= 49"
]
}
}
]
];
const plugins= [
["@babel/plugin-proposal-decorators", { decoratorsBeforeExport: true }],
["@babel/plugin-proposal-class-properties", { "loose": true }]
];
return {
presets,
plugins
}
}
Содержимое webpackconfig.js
:
const path = require('path');
module.exports = {
module: {
rules: [
{
test: /\.(js|jsx)$/,
exclude: [
/\bcore-js\b/,
/\bwebpack\/buildin\b/
],
use: {
loader: 'babel-loader',
options: {
babelrc: false,
configFile: path.resolve(__dirname, 'babel.config.js'),
compact: false,
cacheDirectory: true,
sourceMaps: false,
},
},
},
],
},
devtool: "cheap-source-map",
output: {
path: path.resolve(__dirname, './dist'),
filename: 'shim.js',
}
}
Содержимое записи JS file src/index.js
:
import Postmate from 'postmate';
// Postmate and rest of the code
...
Будет сгенерировано:
dist/shim.js 177K
dist/shim.js.map 140K
Вы можете протестировать распространенный в Интернете пример, работающий с использованием useBuiltIns: "usage"
в IE 11 здесь: https://zikro.gr/dbg/so/61044894/usage/. ( У дочернего iFrame есть кнопка, которая меняет цвет фона родительского окна на случайный цвет )
Вы можете найти репозиторий со всем проектом и пример использования ветки в этом хранилище / ветке Github: https://github.com/clytras/ie11-postmate/tree/usage
Использование useBuiltIns: "entry"
В соответствии с этой проблемой обсуждение "использование символа вызывает исключение в IE11 ", вам необходимо:
- Исключить
@babel-runtime
и core-js
в правиле для .js
файлов. - Иметь
corejs: "3"
и useBuiltIns: 'entry'
для @babel/preset-env
предустановка внутри babel.config.js
файла. - Должен быть
core-js/stable
и postmate
импорт в исходный файл JS файла.
Содержимое bavel.config.js
:
module.exports = function (api) {
api.cache(true);
const presets = [
[
'@babel/preset-env',
{
corejs:"3",
useBuiltIns: 'entry',
targets: {
browsers: [
"edge >= 16",
"safari >= 9",
"firefox >= 57",
"ie >= 11",
"ios >= 9",
"chrome >= 49"
]
}
}
]
];
const plugins= [
["@babel/plugin-proposal-decorators", { decoratorsBeforeExport: true }],
["@babel/plugin-proposal-class-properties", { "loose": true }]
];
return {
presets,
plugins
}
}
Содержимое webpackconfig.js
:
const path = require('path');
module.exports = {
module: {
rules: [
{
test: /\.(js|jsx)$/,
exclude: /@babel(?:\/|\\{1,2})runtime|core-js/,
use: {
loader: 'babel-loader',
options: {
babelrc: false,
configFile: path.resolve(__dirname, 'babel.config.js'),
compact: false,
cacheDirectory: true,
sourceMaps: false,
},
},
},
],
},
devtool:"cheap-source-map",
output: {
path: path.resolve(__dirname, './dist'),
filename: 'shim.js',
}
}
Содержимое записи JS file src/index.js
:
import 'core-js/stable';
window.Postmate = require('postmate/build/postmate.min.js');
// Postmate and rest of the code
...
Будет сгенерировано:
dist/shim.js 641K
dist/shim.js.map 459K
Вы можете проверить в IE 11 здесь: https://zikro.gr/dbg/so/61044894/.