Я некоторое время работал над проектом PHP, и клиент запросил поддержку IE11 в последнюю минуту. Проблемы с HTML / CSS, с которыми я могу справиться, но мой javascript был написан с использованием современного синтаксиса.
Поэтому я устанавливаю узел, беру свой javascript, запускаю его через Rollup & Babel при первой необходимости и кеширую результат для будущих запросов.
Теперь в выводе отсутствуют функции стрелок, которые раньше вызывали у меня головную боль, но у меня возникла большая проблема: полифиллы - это операторы импорта , а IE11 не поддерживает операторы импорта .
Я чувствую, что мне нужно подчеркнуть, что я не использую сервер узлов - это сервер PHP, я просто использую узел на серверной стороне для накопительного пакета и babel. Если что-то делает узел, чтобы сделать эту работу, я не знаком с этим.
Вот мой rollup.config.js:
import commonjs from 'rollup-plugin-commonjs';
import resolve from 'rollup-plugin-node-resolve';
import babel from 'rollup-plugin-babel';
import minify from 'rollup-plugin-babel-minify';
export default {
input: '_dud_input.js', // These are set in the exec() call
output: {
file: '_dud_output.js', // These are set in the exec() call
format: 'iife',
strict : false
},
plugins: [
resolve({
browser: true
}),
commonjs({
sourceMap: false
}),
babel({
exclude: 'node_modules/**' // only transpile our source code
}),
minify({
"comments": false
})
]
};
А вот babel.config.js
:
module.exports = {
"presets" : [
[
"@babel/preset-env",
{
"targets": {
"browsers": "> 0.5%, ie >= 11"
},
"modules": false,
"spec": true,
"useBuiltIns": "usage",
"forceAllTransforms": true,
"corejs": {
"version": 3,
"proposals": false
}
}
]
]
}
Для хихиканья, вот скрипт оболочки, который я вызываю для запуска процесса:
#!/bin/bash
set -e
# Expected argument values:
# $1 - Path of the root directory
# $2 - Path of the node binary
# $3 - Path of the rollup binary
# $4 - Source file path
# $5 - Destination file path
if [ $# -ne 5 ]
then
exit 99
fi
ROOT_DIR=$1
NODE_BIN=$2
ROLLUP_BIN=$3
SRC_PATH=$4
DEST_PATH=$5
cd ${ROOT_DIR}
${NODE_BIN} ${ROLLUP_BIN} -c ${ROOT_DIR}/rollup.config.js -i ${SRC_PATH} -o ${DEST_PATH}
И он связан так:
<script defer="" type="text/javascript" src="http://example.com/site-asset/flatfile.js"></script>
С этими настройкамиМой файл flatfile.js выводит в верхней части следующее:
import"core-js/modules/es.symbol";
import"core-js/modules/es.symbol.description";
import"core-js/modules/es.symbol.iterator";
import"core-js/modules/es.array.concat";
import"core-js/modules/es.array.filter";
import"core-js/modules/es.array.find";
import"core-js/modules/es.array.for-each";
// ...etc...
При этой настройке консоль IE11 говорит, что в первой строке каждого файла с операторами импорта есть Syntax error
.
Изменение useBuiltIns
с usage
на entry
(что, как я понимаю, означает, что я ожидаю, что в другом месте будет файл ввода, который добавляет полифиллы), и включение https://polyfill.io/v3/ ничего не делает (я получаю ошибкина Number.parseFloat()
звонки).
В отчаянии я даже добавил к своему приложению маршрут "core-js", который пытается обработать соответствующий файл core-js - но нет никаких признаков того, что IE11 дажепытаясь следовать инструкциям require.
Осматривая intэ-э-э, кажется, что это не проблема для кого-то еще - IE11, очевидно, работает для всех остальных?
Может быть, это потому, что я не использую сервер узлов, а сервер PHP / Apache?
Я просто хочу, чтобы Babel включил полифилы core-js в мои файлы, а не как операторы require, которые IE11 не знает, как анализировать.