青训营X豆包MarsCode 技术训练营第六课 | 豆包MarsCode AI 刷题

42 阅读2分钟

第六篇伴学笔记啦~ 青训营最后一天,感觉收获还是不小的,今天的内容是js和css新语法转译工具——babel和postcss

babel

1、Babel 主要由核心模块(@babel/core)、预设、插件、polyfill以及其他辅助模块组成,它们共同协作来完成 JavaScript 代码的编译和转换工作。

2、核心包:@babel/core用于编译

3、命令行工具:@babel/cli可以在命令行将一个文件内容转译

 # 转码结果输出到标准输出
 $ npx babel example.js
 ​
 # 转码结果写入一个文件
 # --out-file 或 -o 参数指定输出文件
 $ npx babel example.js --out-file compiled.js
 # 或者
 $ npx babel example.js -o compiled.js
 ​
 # 整个目录转码
 # --out-dir 或 -d 参数指定输出目录
 $ npx babel src --out-dir lib
 # 或者
 $ npx babel src -d lib
 ​
 # -s 参数生成source map文件
 $ npx babel src -d lib -s

4、polyfill

Babel 默认只转换新的 JavaScript 句法(syntax),而不转换新的 API,比如IteratorGeneratorSetMapProxyReflectSymbolPromise等全局对象,以及一些定义在全局对象上的方法(比如Object.assign)都不会转码。

举例来说,ES6 在Array对象上新增了Array.from方法。Babel 就不会转码这个方法。如果想让这个方法运行,可以使用core-jsregenerator-runtime(后者提供generator函数以及等等异步函数的转码),为当前环境提供一个垫片。

安装命令如下。

 $ npm install --save-dev core-js regenerator-runtime

然后,在脚本头部,加入如下两行代码。

 import 'core-js';
 import 'regenerator-runtime/runtime';
 // 或者
 require('core-js');
 require('regenerator-runtime/runtime');
  • .babelrc中如何配置?
 {
   "presets": [
     [
       "@babel/preset-env",
       {
         "useBuiltIns": "usage",
           //有三个值
           //false-不自动引入任何polyfill
           //usage-自动引入,在代码中有实际使用到的特性才会被引入,避免了引入不必要代码,减小最终打包大小
           //entry-需要在项目入口手动引入polyfill
         "corejs": 3//定义corejs的版本
       }
     ]
   ]
 }

postcss

postcss是一个运行在nodejs环境下可以将项目要支持的浏览器暂不支持的css新特性转成可以运行的css旧语法的集成工具(安装postcss和postcss-cli)

1、如何配置项目要支持的浏览器?——在package.json中的browserList中配置

2、postcss集成能使用哪些规则?

规则一:使用autoprefixer可以自动获取浏览器的流行度和能够支持的属性,并根据这些数据帮你自动为css规则添加前缀(安装autoprefixer)

规则二:使用postcss-preset-env将新语法转成旧语法,比如将css的嵌套语法转换(安装postcss-preset-env)

规则三:使用stylelint检查css语法(安装stylelint和stylelint-config-standard),后者是stylelint的一些基本的规则

规则三:使用postcss-pxtorem可以将css中px单位转成rem单位(安装postcss-pxtorem)

 `命令行指令`
 npx postcss 原本的css文件 -o 指定输出文件名
 比如:npx postcss style.css -o dist.css
 `postcss文件配置`
 1、创建一个postcss.config.js
 2、文件内容:
 const postcssPresetEnv = require('postcss-preset-env')
 module.export = {
     plugins:[
         require('stylelint'),
         require('autoprefixer'),
         postcssPresetEnv({
             stage:0,//将stage为0的css语法新特性转译,比如是css嵌套新语法
         }),
         require('postcss-pxtorem')
     ]
 }
 `将stylelint配置规则`
 1、创建一个.stylelintrc.json
 2、文件内容:
 {
     "extends":"stylelint-config-standard"
 }

规则四:css模块改名