Я написал библиотеку элементов и хочу убедиться, что дизайнеры могут просто добавить нужный исходный файл на свои HTML-страницы, чтобы начать его использовать. Я создаю пакет, используя накопительный пакет (чтобы свернуть его в один файл) и babel (чтобы убедиться, что любой браузер может использовать его).
Мой rollup.conf
довольно прост:
import resolve from 'rollup-plugin-node-resolve'
import babel from 'rollup-plugin-babel'
import minify from 'rollup-plugin-babel-minify'
module.exports = [
// IIFE
{
input: './tpe.js',
output: {
file: 'distr/tpe.js', // IIFE ONE FILE
format: 'iife'
},
plugins: [resolve({}), babel({})]
},
{
input: './themes/material/material.js',
output: {
file: 'distr/material.js', // IIFE ONE FILE
format: 'iife'
},
plugins: [resolve({}), minify({})]
}
]
Обратите внимание, что ./tpe.js
содержит длинный список импорта:
import './ee-autocomplete-input-spans.js'
import './ee-autocomplete-item-country.js'
import './ee-autocomplete-item-email.js'
import './ee-autocomplete-item-li.js'
import './ee-autocomplete.js'
import './ee-drawer.js'
import './ee-fab.js'
import './ee-header.js'
import './ee-nav-bar.js'
import './ee-network.js'
import './ee-snack-bar.js'
import './ee-tabs.js'
...
My babel.conf.js
еще проще:
module.exports = function (api) {
api.cache(true)
const presets = [
[
'@babel/env', {
modules: false,
exclude: [],
targets: {
ie: "9"
}
}
]
]
const plugins = []
return {
presets,
plugins
}
Это все хорошо, за исключением того, что я долженпопросить моих пользователей сделать это:
<script src="https://unpkg.com/@babel/polyfill/dist/polyfill.min.js"></script>
<script src="./distr/material.js"></script>
<script src="./distr/tpe.js"></script>
<nn-input-text id="input" name="aName"></nn-input-text>
Без этого polyfill.min.js я получу страшную regeneratorRuntime is not defined
.
Я потратил часы, часы и часы, пытаясь сделатьуверен, что мне не нужно просить пользователей иметь это polyfill.min.js
.
Чтобы "исправить" проблему, я добавил это к своему ./tpe.js:
import 'regenerator-runtime/runtime'
import './ee-autocomplete-input-spans.js'
import './ee-autocomplete-item-country.js'
import './ee-autocomplete-item-email.js'
import './ee-autocomplete-item-li.js'
Это фактически позволяет мне иметь только это:
<script src="./distr/material.js"></script>
<script src="./distr/tpe.js"></script>
<nn-input-text id="input" name="aName"></nn-input-text>
ВОПРОСЫ:
Babel компилирует вещи в node_modules, которые в моем случае точно освещены и освещены-элемент (оба источника ES6). У меня были проблемы в начале, когда lit-element (в node_modules) не компилировался. Однако проблема исчезла, и я не знаю, как / почему.
Является ли regenerator-runtime/runtime
ЕДИНСТВЕННОЙ вещью, которая мне когда-либо понадобится для заполнения? В конце концов, я нацеливаюсь на IE9 ...
Есть ли лучший способ добавить regenerator-runtime/runtime
, не добавляя его во включения в tpe.js?
Я читал о том, что "corejs" важен, поскольку он обеспечивает больше полифилов. Однако добавление этого
useBuiltIns: "usage",
corejs: 3
приводит к большому количеству предупреждений. И затем, если я добавлю исключение в rollup.conf.js
следующим образом:
plugins: [resolve({}), babel({exclude: [/\/core-js\//]}), minify({})]
Вещи компилируются, но результат не работает (Uncaught SyntaxError: Cannot use import statement outside a module
). Если я вместо этого сделаю:
useBuiltIns: "entry",
corejs: 3
Мне не нужно «исключать», но, похоже, оно ничего не делает. Мне на самом деле нужны полифилы corejs?