js:Browserslist用特定语句查询浏览器列表的工具与Babel和Postcss配置使用

目录

Browserslist

Browserslist 是一个用特定语句查询浏览器列表的工具

文档

安装

bash 复制代码
pnpm install --save-dev browserslist

使用示例

bash 复制代码
$ npx browserslist "last 2 Chrome versions" 

chrome 119
chrome 118

Babel 和 Browserslist

文档

有如下代码,需要通过babel转译为兼容浏览器的代码

src/index.js

js 复制代码
const say = (msg) => {
  console.log(msg);
};
say("hello");

安装 babel依赖

bash 复制代码
pnpm install --save-dev @babel/core @babel/cli @babel/preset-env

在 package.json 中配置babel

json 复制代码
{
  "babel": {
    "presets": [
      "@babel/preset-env"
    ]
  }
}

运行

bash 复制代码
$ npx babel ./src/index.js --out-dir dist

输出

js 复制代码
"use strict";

var say = function say(msg) {
  console.log(msg);
};
say("hello");

在 package.json 中增加browserslist 配置

json 复制代码
{
    "babel": {
        "presets": [
          "@babel/preset-env"
        ]
    },
    "browserslist": [
        "chrome 119"
    ]
}

运行

bash 复制代码
$ npx babel ./src/index.js --out-dir dist

输出

js 复制代码
"use strict";

const say = msg => {
  console.log(msg);
};
say("hello");

比对两次输出,将浏览器兼容范围减小后,代码直接就是箭头函数

Postcss 和 Browserslist

使用postcss自动添加css的浏览器前缀

文档

安装

bash 复制代码
$ pnpm i -D postcss postcss-cli autoprefixer

在 package.json 中 配置 postcss

json 复制代码
{
  "postcss": {
    "map": false,
    "plugins": {
      "autoprefixer": {}
    }
  }
}

src/style.css

css 复制代码
.box {
  box-sizing: border-box;
}

不配置browserslist的情况下

运行命令

bash 复制代码
$ npx postcss ./src/style.css -o dist/style.css

生成

css 复制代码
.box {
  box-sizing: border-box;
}

package.json 配置browserslist

json 复制代码
{
    "browserslist": [
        "cover 99.5%"
    ],
}

运行命令

bash 复制代码
$ npx postcss ./src/style.css -o dist/style.css

输出

css 复制代码
.box {
  -webkit-box-sizing: border-box;
     -moz-box-sizing: border-box;
          box-sizing: border-box;
}

推荐配置

Browserslist 将依赖BROWSERSLIST_ENV 或者 NODE_ENV

json 复制代码
{
  "browserslist": {
    "production": [
      "> 1%",
      "last 2 version"
    ],
    "development": [
      "last 1 chrome version",
      "last 1 firefox version"
    ]
  }
}
  • > 1% 全球市场占有率大于 1% 的浏览器
  • last 2 version 所有浏览器的最后 2 个版本
  • last 1 chrome version 查找 Chrome 浏览器的最后 1 个版本

完整配置 package.json

json 复制代码
{
  "type": "module",
  "dependencies": {},
  "devDependencies": {
    "browserslist": "^4.22.1",
    "@babel/cli": "^7.23.0",
    "@babel/core": "^7.23.2",
    "@babel/preset-env": "^7.23.2",
    "autoprefixer": "^10.4.16",
    "postcss": "^8.4.31",
    "postcss-cli": "^10.1.0",
    "postcss-preset-env": "^9.3.0"
  },
  "browserslist": {
    "production": [
      "> 1%",
      "last 2 version"
    ],
    "development": [
      "last 1 chrome version",
      "last 1 firefox version"
    ]
  },
  "babel": {
    "presets": [
      "@babel/preset-env"
    ]
  },
  "postcss": {
    "map": false,
    "plugins": {
      "autoprefixer": {}
    }
  }
}

参考文章

相关推荐
你的冰西瓜6 分钟前
C++20 新特性详解:相较于 C++17 的主要改进
开发语言·c++·stl·c++20
小皮虾9 分钟前
拒绝卡顿!小程序图片本地“极速”旋转与格式转换,离屏 Canvas 性能调优实战
前端·javascript·微信小程序
汤姆Tom11 分钟前
前端转战后端:JavaScript 与 Java 对照学习指南 (第一篇 - 深度进阶版)
java·javascript
瓶子in11 分钟前
JavaScript数组去重的多种实现方式
javascript
Cassie燁13 分钟前
element-plus源码解读2——vue3组件的ref访问与defineExpose暴露机制
javascript·vue.js
Robet15 分钟前
类属性公共还是私有
javascript·typescript
济宁雪人17 分钟前
Java安全基础——JNI安全基础
java·开发语言
x***B41121 分钟前
TypeScript项目引用
前端·javascript·typescript
lsx20240631 分钟前
Django 视图详解
开发语言
h***066539 分钟前
【JSqlParser】Java使用JSqlParser解析SQL语句总结
java·开发语言·sql