【问题标题】:Is there any way to generate multiple transpiled files using different configs with babel?有没有办法使用 babel 的不同配置生成多个转译文件?
【发布时间】:2019-01-31 14:44:10
【问题描述】:

我对 NPM 脚本和 Babel 都很陌生。我以前使用过 Gulp,但我正在尝试转向 Webpack + NPM 脚本,甚至 NPM 仅在不需要 Webpack 时构建。这是后者的一个例子。

我愿意

  • 使用我的主 ES6+ JS 文件src/main.js
  • 使用 babel 生成一个相当现代的脚本文件docs/main.js,使用如下目标:

    browsers: [
           'Chrome >= 60',
           'Safari >= 10.1',
           'iOS >= 10.3',
           'Firefox >= 54',
           'Edge >= 15',
    ],
    
  • 再次使用 babel 生成更“旧”版本的脚本docs/main.legacy.js,使用如下目标:

    "browsers": ["> 1%, not ie 11, not op_mini all"]

  • 使用 npm 脚本创建两个构建任务,稍后我可以将它们放入一个命令中,例如 npm run build

在阅读Philip Walton's article 在他的构建过程中创建多个目标之后,我想知道:

  1. 仅当我不需要 Webpack 时,这是否可以使用 NPM 脚本实现?
  2. 建议采取哪些措施来启用此类功能?

我的尝试:package.json

"scripts": {
    "buildModern": "babel src/main.js -o docs/main.js -presets=env",
    "buildLegacy": "babel --no-babelrc src/main.js > docs/main.legacy.js",
    "build": "echo '=> Building Source Files' && buildModern && buildLegacy"
},

【问题讨论】:

    标签: npm webpack ecmascript-6 babeljs npm-scripts


    【解决方案1】:

    因此,对于将来可能会偶然发现此问题并希望做类似事情的任何人,这就是我想出的。感谢 Dan 的建议。

    1. 您需要创建一个.babelrc 文件并在其中使用"env" 选项,该选项将包含任意数量的环境。
    2. 设置BABEL_ENV=namename 替换为配置文件中指定的名称之一。
    3. 使用你的 babel cli 命令或任何你想做的事情来跟进。例如。

      cross-env BABEL_ENV=modern babel src/js/main.js -o docs/js/main.min.js && echo Building ES6+ Files...`
      
    4. 确保根据需要安装必要的 npm 依赖项。希望这会有所帮助。

    这是我的配置文件的示例

    {
        "env": {
            "legacy": {
                "presets": [
                    ["minify"],
                    ["env", {
                        "targets": {
                            "browsers": ["> 1%, not ie 11, not op_mini all"]
                        }
                    }]
                ]
            },
            "modern": {
                "presets": [
                    ["minify"],
                    ["env", {
                        "targets": {
                            "browsers": [
                                "Chrome >= 60",
                                "Safari >= 10.1",
                                "iOS >= 10.3",
                                "Firefox >= 54",
                                "Edge >= 15"
                            ]
                        }
                    }]
                ]
            }
        }
    }
    

    【讨论】:

    • 就是这样!
    【解决方案2】:

    拥有多个 babel 配置的一种方法是使用 different environments in your .babelrc file(通过 env 选项)并通过在每个 NPM 脚本中设置 BABEL_ENV 变量来定位它们。

    仅 Babel 的方法可以很好地转译单个 JS 文件,但是如果您想在文件中导入其他模块并使其在浏览器中工作,您将需要一个捆绑器,例如 Webpack 或 Rollup。

    编辑:请参阅下面基诺的文章。

    【讨论】:

    • 感谢您的指导,我不得不做大量的研究和实验,但我终于得到了一个适合我的配置。
    • 我很高兴它成功了!很抱歉我不能提供更详细的指导,我在后院打电话:)
    • 没问题!无论如何,您帮助我找到了解决问题的最佳途径?
    猜你喜欢
    • 1970-01-01
    • 2012-03-29
    • 2012-02-10
    • 2015-03-07
    • 1970-01-01
    • 2013-08-10
    • 2020-08-13
    • 1970-01-01
    • 2022-12-19
    相关资源
    最近更新 更多