webpack@4中babel7配置

9 篇文章 0 订阅
5 篇文章 0 订阅

安装

首先确保本地已经安装了webpack和webpack-cli

安装babel-loader

npm i -D babel-loader

安装玩后,控制台有提示:
在这里插入图片描述
按照提示安装@babel/core@^7.0.0

npm i -D @babel/core@^7.0.0

继续安装@babel/preset-env

npm i -D @babel/preset-env

注意:
注意版本冲突,babel-loader 8.x对应babel 7.x,以此类推

配置

webpack配置

webpack.config.js中增加匹配规则:

module.exports = {
    module:{  
        rules:[   
            {
                test:/\.js$/,   //匹配JS文件  
                use:'babel-loader',
                exclude:/node_modules/   //排除node_modules目录
            }
        ]
    }
}

Babel配置

在工程跟目录创建名为 .babelrc 的Babel配置文件(需要遵守JSON规范)

{
    "presets": ["@babel/env"]
}

测试

该安装的也已经安装了,该配置的也都配置了,那么我们现在来测试一下

假如我们现在有个b.js文件

let a = new Map()

我们通过webpack打包试试,webpack配置文件:

module.exports = {
    entry: './b.js',
    output: {
		filename: './b.min.js'
	},
    module:{
        rules:[
            {
                test: /\.js$/,
                exclude: /node_modules/, 
                loader: "babel-loader"
            }
        ]
    },
    mode: "development" // 开发模式,不会打包后的js文件
}

运行:

npx webpack

转换后的文件:
在这里插入图片描述
可见,babel已经将es6的语法let转成了var,但是Map()并没有转,在不支持es6的浏览器中仍然无法运行,这时,我们需要用到babel-polyfill

babel-polyfill

安装babel-polyfill

npm i -S @babel/polyfill

修改babel配置文件:

{
    "presets": [
        [
          "@babel/env",
          {
            "useBuiltIns": "usage",
            "targets": {
              "chrome": "64",
              "ie": "9"
            }
          }
        ]
      ]
}

useBuiltIns和targets配置的解释见文章:babel7入门 —— 超详细学习笔记

配置好后执行:

npx webpack

结果:
在这里插入图片描述
可见,在输出的js文件中,引入很多腻子脚本以达到在低版本浏览器支持map的目的

transform-runtime

对于开发应用来说,直接使用上述的 polyfill 方案是比较方便的,但如果是开发工具、库的话,这种方案未必适合(babel-polyfill 是通过向全局对象和内置对象的prototype上添加方法实现的,会造成全局变量污染)。Babel 提供了另外一种方案 transform-runtime,它在编译过程中只是将需要polyfill的代码引入了一个指向 core-js 中对应模块的链接(alias)

安装依赖:

npm install --save-dev @babel/plugin-transform-runtime
npm install --save @babel/runtime

参考plugin-transform-runtime 的配置:

{
  "presets": [
    ["@babel/env", {
      "modules": false,
      "targets": {
         "chrome": "64"
       }
    }]
  ],
  "plugins": [["@babel/plugin-transform-runtime", {
      "useBuiltIns": true
      // "polyfill": false
    }]
  ]
}

这里解释一下 useBuiltIns(默认为 false) 和 polyfill(默认为 true) 两个选项,如果不配置或使用默认值,那 Babel 是会自动 polyfill 的(引入core-js polyfill 的alias),哪怕你指定的 targets 只有最新版chrome,最终编译出来的包会比较大,这不是我们所希望的。解决办法是通过配置 polyfill为 false 或 useBuiltIns 为true (二选一即可),从而不引入 core-js 的 polyfill 。如果目标环境是较新的浏览器,可以按此配置,但是有一些最新的特性可能还需要单独 polyfill。个人认为,如果开发应用可以直接使用 babel-polyfill 方案,相对来说简单方便,编译输出的包大小也是可控的
——————————————————————————
transform-runtime部分转自文章:
标题:使用 webpack 4 和 Babel 7 配置 Vue.js 工程模板
链接:https://segmentfault.com/a/1190000015247255
作者:xsbear

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
webpack配置babel需要以下步骤: 1. 首先,需要安装相应的依赖包。可以通过运行以下命令来安装babel相关的包: ``` npm install @babel/core @babel/preset-env babel-loader --save-dev ``` 2. 接下来,在webpack配置文件进行相关配置。你可以在webpack.config.js添加一个module.rules的规则,用于处理js和jsx文件。配置如下所示: ```javascript module.exports = { // ... module: { rules: [ { test: /\.(js|jsx)$/, exclude: /node_modules/, use: { loader: 'babel-loader', options: { presets: ['@babel/preset-env'] } } } ] } // ... } ``` 这样配置之后,webpack会使用babel-loader来处理js和jsx文件,并且使用@babel/preset-env配置来转译es6+的语法为浏览器可识别的代码。 3. 最后,你可能还需要在项目根目录下添加一个.babelrc文件,用于配置babel的详细选项。例如可以在.babelrc添加以下配置: ```json { "presets": ["@babel/preset-env"] } ``` 这样,你就可以使用babel来转译你的代码了。同样的配置方法也适用于其他需要babel转译的文件类型,只需要在module.rules添加相应的规则即可。 注意,以上是一个简单的babel配置示例,具体的配置还取决于你的项目需求和babel插件的使用情况。你可以根据自己的需求进行相应的调整和扩展。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [webpackbabel配置](https://blog.csdn.net/qq_39111074/article/details/121371923)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值