【问题标题】:Rollup + @babel/preset-env + @babel/polyfill汇总 + @babel/preset-env + @babel/polyfill
【发布时间】:2019-03-11 23:48:45
【问题描述】:

在使用 Rollup 时,如何使其同时与 @babel/preset-env@babel/polyfill 一起使用?提到添加useBuiltIns: 'usage' 的文档,但是当我这样做时,我在控制台中收到require is not defined 错误。以下是我到目前为止所拥有的;有更推荐的设置吗?

rollup.config.js:

import babel from 'rollup-plugin-babel';
import resolve from 'rollup-plugin-node-resolve';
import { terser } from 'rollup-plugin-terser';

const dist = './dist/';
const name = 'focusoverlay';

export default {
  input: './src/index.js',
  output: [
    {
      file: `${dist}${name}.cjs.js`,
      format: 'cjs'
    },
    {
      file: `${dist}${name}.esm.js`,
      format: 'esm'
    },
    {
      name: 'FocusOverlay',
      file: `${dist}${name}.js`,
      format: 'umd'
    }
  ],
  plugins: [
      resolve(),
      babel({ exclude: 'node_modules/**' }),
      terser()
  ]
};

.babelrc:

{
  "presets": [
    [
      "@babel/preset-env",
      {
        "useBuiltIns": "usage",
        "modules": false,
        "targets": {
          "browsers": "> 0.25%, not op_mini all, not dead, IE 10-11",
          "node": 6
        }
      }
    ]
  ]
}

【问题讨论】:

    标签: javascript babeljs rollup babel-polyfill babel-preset-env


    【解决方案1】:

    我通过删除我的 .babelrc 文件并将我的 babel 配置完全移动到 rollup.config.js 来解决此问题。然后我还包含了 rollup-plugin-commonjs 插件,用于将 CJS 模块转换为 ES6。我的最终配置示例:

    import babel from 'rollup-plugin-babel';
    import resolve from 'rollup-plugin-node-resolve';
    import commonjs from 'rollup-plugin-commonjs';
    import { terser } from 'rollup-plugin-terser';
    
    const dist = './dist/';
    const name = 'focusoverlay';
    
    export default {
      input: './src/index.js',
      output: [
        {
          file: `${dist}${name}.cjs.js`,
          format: 'cjs'
        },
        {
          file: `${dist}${name}.esm.js`,
          format: 'esm'
        },
        {
          name: 'FocusOverlay',
          file: `${dist}${name}.js`,
          format: 'umd'
        }
      ],
      plugins: [
          resolve(),
          babel({
            exclude: 'node_modules/**',
            presets: [
              [
                '@babel/env',
                {
                  modules: 'false',
                  targets: {
                    browsers: '> 1%, IE 11, not op_mini all, not dead',
                    node: 8
                  },
                  useBuiltIns: 'usage'
                }
              ]
            ]
          }),
          commonjs(),
          terser()
      ]
    };
    

    完整配置here。当然仍然欢迎提出改进建议。

    【讨论】:

      猜你喜欢
      • 2018-08-30
      • 2018-04-27
      • 2021-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-10
      • 2018-03-18
      • 2019-06-06
      相关资源
      最近更新 更多