babel

can i use 兼容性

一 复习ES6

js:

ECMA(babel---ES6转ES5)
DOM:(JQ VUE react)
BOM:(window.loaction.href)

ES6:

1 新增语法
let const    async await    拓展运算符    for of    ()=>
解构赋值    import export
2 新增API
Object.assgin()
Promise
通病:兼容性不高

二 Babel

解决ES6的兼容性问题 chrom可以独立更新,考虑最高版本即可。

安装 npm i @babel/core   @babel/cli -D

npm info :查看包的信息

如何正确使用前端工具:

(前端工具一定要本地安装,是为了统一项目中工具的版本)

① Babel下执行命令,在node_modules中的bin中,这样比较麻烦

② 本地安装:npx -v 会在当前目录下的node_modules中的bin去寻找

③ 本地安装:npm脚本,配置:“babel”:“babel -v” 执行命令:npm run babel

④ 全局安装:npm i @babel/core @babel/cli -g可以用babel命令(环境变量中寻找npm)

去掉全局安装 npm uninstall @babel/core @babel/cli -g

特殊脚本 start :npm run babel 可以直接运行npm start

三 解决语法的兼容性问题

Babel命令行工具的使用 找到入口

安装插件,让插件帮助解析代码 在script后面添加plugind -o打包到另外一个文件

npm i @babel/core @babel/cli -D
 "scripts": {
        "babel": "babel ./src/js/index.js -o ./dist/js/index.js",
        }

优化插件新建文件.babelrc

创建babel的配置文件: .babelrc
    {
        "presets": ["@babel/preset-env"]
    }

Babel套餐 下载套餐 配置presets

安装套餐: npm i @babel/preset -D

四 解决API的兼容性问题

mdn https://developer.mozilla.org/zh-CN/

衬垫代码polyfill 安装 -S(默认可不加):生产环境

安装衬垫: npm i @babel/polyfill

区别:生产环境上线能带着 开发环境不用带

引入import 浏览器不认识require

**注意:**Babel只能将es6的模块化语法编译成commonJS语法

安装commonjs的打包工具,browserify : npm i browserify -D
查看使用方式:npx  browserify   -h  

配置

"scripts": {
        "babel": "babel ./src/js/index.js -o ./dist/js/index.js",
        "brow" :" browserify ./dist/js/index.js -o ./dist/js/index.min.js",
        "start": "npm run babel && npm run brow"
      }

运行:npm run brow (7000多行)

可以同时在start里同时运行两个脚本

 "start": "npm run babel && npm run brow"

官网查看https://www.babeljs.cn/

按需引入:useBuiltIns

使用profill会污染全局环境 改造浏览器

runtime 直接生成方法

解决生成很多次方法

两者有什么区别?

babel只负责进行语法转换,将es6语法转换成es5语法,但如果是在es5中,有些对象,方法实际在浏览器中可能是不支持的,例如:promise array.prototype.includes,这时候就需要@babel/polyfill来做模拟。@babel/polyfill虽然可以解决模拟不存在对象方法的事情,但是有以下两个问题:

  • 直接修改内置的原型,造成全局污染
  • 无法按需引入,webpack打包时,会把所有的polyfill都加载进来,导致产出文件过大

为了解决这个问题,Babel社区又提出了@babel/runtime的方案,@babel/runtime不再修改原型,而是采用替换的方式,比如我们用promise,使用@babel/polyfill会产生一个window.promise对象,而@babel/runtime则会生成一个_promise(实例)来替换我们代码中用到的promise,另外@babel/runtime还支持按需引入。

babel使用方式总结

安装 : npm i @babel/core @babel/cli -D
安装套餐: npm i @babel/preset -D
安装衬垫: npm i @babel/polyfill
安装commonjs的打包工具,browserify : npm i browserify -D
创建babel的配置文件: .babelrc
    {
        "presets": ["@babel/preset-env"]
    }
配置npm脚本: package.json
    "scripts": {
        "babel": "babel ./src/js/index.js -o ./dist/js/index.js",
        "brow" :" browserify ./dist/js/index.js -o ./dist/js/index.min.js",
        "start": "npm run babel && npm run brow"
      }
编译打包文件
    npm start

babel注意点

1. 按需引入衬垫
    安装: npm install core-js@3 --save
    删除import "@babel/polyfill"
    修改.babelrc
        {
          "presets": [
            [
              "@babel/preset-env",
              {
                "useBuiltIns":"usage",
                "corejs":3
              }
            ]
          ]
        }

2. 如何在不影响全局环境的情况下,生成衬垫(类库开发)
    安装: npm i @babel/runtime @babel/plugin-transform-runtime -D
    安装: npm i @babel/runtime-corejs3
    修改.babelrc:
        {
          "presets": ["@babel/preset-env"],
          "plugins": [
            [
              "@babel/plugin-transform-runtime",
              {
                "corejs":3
              }
            ]
          ]
        }

npm命令请缓存

npm初始化项目 : npm init
npm安装包     : npm i 包名 -D
查看包的完整信息: npm info 包名
查看全局安装目录: npm root -g
npm清缓存     : npm cache clean -f
强制清除npm缓存:npm npm-cache clean -f 

npm 源

查看源:npm get registry 

下载包:切换到淘宝镜像:npm config set registry http://registry.npm.taobao.org/

上传包:切换到国外镜像:npm config set registry https://registry.npmjs.org/
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值