前端工程化-babel、corejs、postcss

简介: 前端工程化-babel、corejs、postcss

一. babel和corejs的作用到底是什么

脑子里面的想法 es6 -> es5


es6里面其实有两种东西 语法 新特性


转的语法


const a = 1


const b = () => 123


... //解构 属于新语法


二. index.js

Promise.resolve(1).then((res) => console.log(res))


Object.assign({}) // 这些新特性是不会进行代码转换的 所以大家不要搞错


大家不信的话简单编写一个babel


在我的工程项目里面进行演示


先安装核心库 cnpm i @babel/core


在package.json 改 "type": "module"


再安装核心库 cnpm i @babel/preset-env


三. babe.js

1. es6 => es5

import babel from "@babel/core"
import fs from 'node:fs'
import presetEnv from "@babel/preset-env"
 
const code = fs.readFileSync('./index.js', 'utf-8') // 不加utf-8是字符串
// console.log(code)
 
// 同步转换 第二个参数是一个预设
babel.transformAsync(code, {
  presets: [presetEnv]
}).then((res) => {
  console.log(res.code) // es6 => es5
})CopyCopy

core-js 新的api怎么处理 会提供polyfill 也就是一个垫片

2. 原理

'Promise' in window 没有的话 在代码里面手写一个promise去用

'find' in Array.prototype 有没有 没有的话 在代码里面也是去手写一个

变成一个二维数组 cnpm i core-js

import babel from "@babel/core"
import fs from 'node:fs'
import presetEnv from "@babel/preset-env"
 
const code = fs.readFileSync('./index.js', 'utf-8') // 不加utf-8是字符串
// console.log(code)
 
// 同步转换 第二个参数是一个预设
babel.transformAsync(code, {
  presets: [[
    presetEnv,
    {
      useBuiltIns: 'usage', // 新特性会按需引入 垫片
      corejs: 3
    }
  ]]
}).then((res) => {
  console.log(res.code) // es6 => es5
})CopyCopy
1. const x = [1, 2, 3]
2. const y = x.filter(item => item > 1)CopyCopy

babel转语法的 core-js通过一个垫片 兼容这个新特性 所以大家这个babel千万不要搞混了

四. postcss的作用到底是什么

// babel + corejs 上一节已经将了这个 babel es6转es5 corejs兼容js的新特性


// babel 转换大概流程 js => AST(抽象语法树) => transform => generated code


// postcss 类似 js => AST(抽象语法树) => transform => generated code


他本身是一个工具 并不会做什么的


只是帮我提供这个过程 过程中间进行加工 比如加前缀 比如-ms -webkit -moz 兼容各种浏览器


只是提供这些 功能 插件由我们自己编写


官网 PostCSS - 是一个用 JavaScript 工具和插件来转换 CSS 代码的工具 | PostCSS中文网


加前缀 转换新特性 都是postcss带给我们的 我们简单的去实现一下它的相关功能

1. index.css

1. .display {
2. display: flex; /* 希望加上前缀 */
3.   color: oklch(61% 0.2 29); /* 很新的css函数 颜色空间 亮度 色相 饱和度 */
4. }CopyCopy

cnpm i postcss

cnpm i autoprefixer

cnpm i postcss-preset-env

处理新特性 跟babel是一样的 也叫 preset env

package.json 设置module

2. index.js

import postcss from "postcss"
import autoprefixer from "autoprefixer"
import postcssEnv from "postcss-preset-env"
import fs from "node:fs"
 
const css = fs.readFileSync('./index.css', 'utf-8')
 
// 插件塞进去
postcss([postcssEnv({
  browsers: 'last 2 versions' // 兼容最近的2个浏览器版本
}), autoprefixer]).process(css, {
  from: './index.css'
}).then(res => {
  console.log(res.css)
})
目录
相关文章
|
9天前
|
缓存 前端开发 JavaScript
前端性能优化实践与工程化
前端性能优化实践与工程化
|
1天前
|
前端开发 安全 JavaScript
前端工程化实战 - 日程管理
前端工程化实战 - 日程管理
4 0
|
1天前
|
存储 JavaScript 前端开发
前端工程化
前端工程化
6 0
|
27天前
|
资源调度 JavaScript 前端开发
【前端开发---Vue2】史上最详细的Vue入门教程(六) --- 工程化开发和脚手架、组件注册
【前端开发---Vue2】史上最详细的Vue入门教程(六) --- 工程化开发和脚手架、组件注册
【前端开发---Vue2】史上最详细的Vue入门教程(六) --- 工程化开发和脚手架、组件注册
|
9天前
|
运维 前端开发 JavaScript
什么是前端工程化❓
什么是前端工程化❓
20 0
|
11天前
|
资源调度 前端开发 JavaScript
前端工程化实践:Monorepo与Lerna管理
**前端工程化中,Monorepo和Lerna用于大型项目管理。Monorepo集纳所有项目,便于代码共享、版本控制和CI/CD。Lerna是Monorepo工具,管理多npm包,支持独立或共享版本。安装Lerna用`npm install --save-dev lerna`,初始化后可创建、管理包,通过`lerna bootstrap`、`lerna add`、`lerna publish`等命令协同工作。Lerna配置可在`lerna.json`,与CI/CD工具集成实现自动化。
15 0
|
1月前
|
前端开发 JavaScript API
【热门话题】PostCSS:现代前端开发中的CSS增强工具
**PostCSS** 是一个JavaScript库,用于转换CSS,通过插件系统解析、优化代码,确保兼容性和效率。它提供插件化架构、向后/向前兼容性、代码质量提升和与其他工具链集成。PostCSS工作原理包括解析CSS成抽象语法树,插件遍历并转换AST,最后生成增强版CSS。主要功能包括Autoprefixer(自动添加浏览器前缀)、CSS变量、CSS Modules、Linting、预处理器支持等。在实际项目中,PostCSS可通过配置文件集成到Webpack等构建工具中,持续优化工作流,助力现代前端开发。
36 3
|
1月前
|
前端开发 JavaScript 开发者
【专栏】前端工程化的重要性,强调构建工具在其中的角色,如Webpack和Rollup
【4月更文挑战第27天】本文探讨了前端工程化的重要性,强调构建工具在其中的角色,如Webpack和Rollup。Webpack以其灵活性和插件系统适用于复杂SPA项目,建议开发者理解其核心概念并优化性能。Rollup则专注于JavaScript模块打包,生成更小、更快的代码,适合小型至中型项目和库创建,以其Tree-shaking技术减小代码体积。开发者应根据项目需求、团队技术和生态选择合适工具,掌握核心原理以提升开发效率和质量。
|
1月前
|
前端开发 JavaScript
JavaScript新科技:PostCSS的安装和使用,2024年最新2024网易Web前端高级面试题总结
JavaScript新科技:PostCSS的安装和使用,2024年最新2024网易Web前端高级面试题总结
|
23天前
|
JSON 前端开发 JavaScript
前端Ajax、Axios和Fetch的用法和区别笔记
前端Ajax、Axios和Fetch的用法和区别笔记
28 2