webpack4知识整理(三)- 处理es6等

  • 处理es6,转换为es5,首先需要安装一些loader

npm install babel-loader @babel/core @babel/preset-env -D
  • 处理更高级的es7语法需要安装以下插件

npm install @babel/plugin-proposal-class-properties -D
  • 在module的rules新增一个处理js的规则

     {
        test:/\.js$/,use:[
          {
            loader:'babel-loader',
            options:{
              presets:[
                '@babel/preset-env'
              ],
              plugins:[
                '@babel/plugin-proposal-class-properties'
              ]
            }
          }
        ]
      },
  • 如果我们在js文件中使用装饰器,就会提示

bdb8fa46346690b8a98d0edb86931b4d370.jpg

  • 提示我们需要对装饰器进行处理

  • 我们去Babel官网去查看一下关于装饰器的处理  babel官网

d7da4fd4e5f900248e79d93f6e393385162.jpg

  • 这里面就会有相应的解决方案了,点进去查看,下载几个插件,配置一下,就OK了

b12941d0fd9916004584f85ec6316afc5d9.jpg

  • 将这个配置配置在webpack.config.js中,在下载@babel/plugin-proposal-decorators插件

npm install @babel/plugin-proposal-decorators -D

 

  • 为了处理generator、promise等语法需要配置@babel/plugin-transform-runtime插件

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

npm install --save @babel/runtime
  • 然后对插件进行配置

      {
        test:/\.js$/,use:[
          {
            loader:'babel-loader',
            options:{
              presets:[
                '@babel/preset-env'
              ],
              plugins:[
                ["@babel/plugin-proposal-decorators", { "legacy": true }],
                ["@babel/plugin-proposal-class-properties", { "loose": true }],
                "@babel/plugin-transform-runtime"   // 新增
              ]
            }
          }
        ],
        include:path.resolve(__dirname,'src'),
        exclude:/node_modules/    // 这里是为了排除掉node_modules里的文件
      },
  • include:path.resolve(__dirname,'src')   指定处理的文件目录

  • exclude:/node_modules/      排除处理的文件目录

 

  • 添加@babel/polyfill  处理   关于 ‘aaa’.includes(‘a’)这样的语法解析成es5低级语法

npm install @babel/ployfill

 

  • 添加eslint JS语法校验

npm install eslint eslint-loader
  • 安装好后在module的rules加入新的规则

      {
        test:/\.js$/,
        use:{
          loader:'eslint-loader',
          options:{enforce: 'pre'}  // 强制将JS的处理规则提前
        }
      },
  • 加入enforce属性,表示将这个loader的处理前置进行处理   npm的eslint中对enforce的说明

  • 此时还差一步,需要到eslint官网下载一个eslintrc.json复制到根目录下,改名为  .eslintrc.json

f12d43c42678ee146f6b7b5c59807b64843.jpg

 

  • 将模块暴露给全局window,先安装loader

npm install expose-loader -D

a4056f86e5ea1c4e41035faff3f72827a2b.jpg

  • 用这样的方式暴漏给window,还有另一种方式在webpack.config.js中进行配置

      {
        test:require.resolve('jquery'),
        use:'expose-loader?$'
      },

4fe53c804a05e78b69aac4313589acda80a.jpg

  • 这种方式也是可以的,js文件中正常引用,只需要在webpack.config.js文件中配置即可

  • 以上这两种方式看起来还不是很方便,接下来通过webpack的插件将要用到的jQuery注入每个模块,在每个js文件中可以直接使用


const Webpack = require('webpack')
... ...

new Webpack.ProvidePlugin({ // 将jQuery注入每个模块
      $:'jquery'
    })
  • 这样在webpack中进行配置就OK了

  • 小注意,如果在某一个模块忘记去掉 import $ from ‘jquery’   jQuery文件就会一起打包,为了防止这个问题可以采用这样的配置
externals:{
    jquery:'$'
  },
  • 可以采用cnd的方式加载jQuery,就不需要将jQuery一起打包了
  • 以上提到了三种方式解决引用jQuery的问题

​​​​​​​​​​​​​​

  1. 暴漏到window上面使用expose-loader的方式
  2. 给每一个模块提供$通过webpack.ProvidePlugin的方式
  3. 通过CDN引用但是不打包externals的方式

转载于:https://my.oschina.net/u/3996596/blog/3044322

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值