[Vue CLI 3] 插件解析之 @vue/cli-plugin-babel

本文我们来看一下官方的这个 @vue/cli-plugin-babel

先看一下源码文件:

generator.js
index.js

核心的有 2 个文件,我们主要第一个 index.js,最外层结构多是插件式的标准结构:

module.exports = (api, options) => {
  // ...
}

这里因为我们要扩展 webpack 的配置,所以使用了:api.chainWebpack

api.chainWebpack(webpackConfig => {
  // ...
})

我们先执行 vue inspect --rule js 看一下最终生成的配置:

/* config.module.rule('js') */
{
  test: /\.jsx?$/,
  exclude: [
    function () { /* omitted long function */ }
  ],
  use: [
    /* config.module.rule('js').use('cache-loader') */
    {
      loader: 'cache-loader',
      options: {
        cacheDirectory: '/Users/***/node_modules/.cache/babel-loader',
        cacheIdentifier: '2f4347b9'
      }
    },
    /* config.module.rule('js').use('babel-loader') */
    {
      loader: 'babel-loader'
    }
  ]
}

对照着这个我们来写相对会简单一点:

1、配置 moduleruletest

注意这里的 rulejs,也就是我们之前 vue inspect 用到的

const jsRule = webpackConfig.module
      .rule('js')
        .test(/\.jsx?$/)

2、配置 exclude

通过 add 方法

.exclude
  .add(filepath => {
    // ...
  })
  .end()

具体的函数:

  • /.vue.jsx?$/
  • options.transpileDependencies

返回 false

这里的 transpileDependencies 是在 vue.confg.js 中配置的,开发者可以自行配置
  • /node_modules/
  • cliServicePath

返回 true

if (/\.vue\.jsx?$/.test(filepath)) {
  return false
}
// exclude dynamic entries from cli-service
const cliServicePath = require('path').dirname(require.resolve('@vue/cli-service'))
if (filepath.startsWith(cliServicePath)) {
  return true
}
// check if this is something the user explicitly wants to transpile
if (options.transpileDependencies.some(dep => filepath.match(dep))) {
  return false
}
// Don't transpile node_modules
return /node_modules/.test(filepath)

3、配置 use

.use('cache-loader')
  .loader('cache-loader')
  .options()
  .end()

4、根据条件判断是否增加 thread-loader

条件如下:用户在 vue.config.js 中是否配置了 parallel 而且要是 production 环境

const useThreads = process.env.NODE_ENV === 'production' 
&& options.parallel

还是用 .user.loader

if (useThreads) {
  jsRule
    .use('thread-loader')
      .loader('thread-loader')
}

最后追加了一个 babel-loader

jsRule
  .use('babel-loader')
    .loader('babel-loader')
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: @vue/cli-plugin-babel/preset是Vue CLI 3中的一个件,用于配置Babel预设。Babel是一个JavaScript编译器,可以将ES6+的代码转换为向后兼容的JavaScript代码,以便在更旧的浏览器中运行。预设是一组Babel件和配置,用于转换特定类型的JavaScript代码。这个件可以让你轻松地配置Babel预设,以便在Vue项目中使用最新的JavaScript语言特性。 ### 回答2: @vue/cli-plugin-babel/preset是一个Vue CLI件,用于向Babel预设添加配置。在Vue项目中,Babel主要用于将ES6+的代码转换为ES5代码,以提高浏览器兼容性。@vue/cli-plugin-babel/preset提供了一组预设配置,以方便开发者进行快速编译。 @vue/cli-plugin-babel/preset集成了一些Babel件和预设,包括babel-preset-env、babel-plugin-transform-runtime、@babel/plugin-proposal-export-namespace-from、@babel/plugin-proposal-numeric-separator等。其中,babel-preset-env是用于根据当前环境自动确定所需的babel件和预设,并将它们集成到转译过程中。babel-plugin-transform-runtime则是用于减少代码重复,缩小代码体积的件。 使用@vue/cli-plugin-babel/preset可以帮助开发者自动加载所需的Babel件和预设,从而降低开发难度,并提高编译速度。同时,也可以避免开发者手动配置Babel的过程中出现的常见问题和错误。 总之,@vue/cli-plugin-babel/preset是一个方便的工具,可以帮助开发者更轻松地进行Vue项目的开发和编译,减少开发时间和代码错误率。 ### 回答3: @vue/cli-plugin-babel/preset 是 Vue CLI 的一个件,它提供了一套默认的 Babel 预设配置,用于将 ES6+ 的 JavaScript 代码转换成浏览器可兼容的 ES5 代码。这个预设配置包括了一系列的 Babel 件,比如 @babel/preset-env 和 @babel/plugin-transform-runtime 等。 @babel/preset-env 使用了浏览器属性的数据来决定哪些转换需要应用到代码中,从而达到最小化的转换和更快的编译速度。这个件可以根据指定的浏览器版本范围自动选择转换件,并可根据配置选项引入不同程度的“polyfills”来模拟特定环境。 @babel/plugin-transform-runtime 可以自动重用来自 babel-runtime 的帮助函数,以避免编译后的代码重复使用这些模块并导致体积膨胀。它还可以对一些常见功能进行转换,并提供了 ES6+ 语言标准不存在的一些功能,如 Promise、Generator 等。 使用 Vue CLI 创建的项目默认开启了 @vue/cli-plugin-babel/preset 件,即默认使用了这套 Babel 预设配置,无需再手动安装和配置。如果需要对默认配置进行修改,则可以在项目的根目录下找到 babel.config.js 文件并进行修改,这个文件定义了 babel 编译的配置选项。 总之,@vue/cli-plugin-babel/preset 件可以为 Vue 开发者提供便利,通过使用默认的 Babel 预设配置,可以快速地将 ES6+ 的代码转换成兼容性更好的 ES5 代码,为项目性能和稳定性提供保障。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值