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": {}
    }
  }
}

参考文章

相关推荐
雷达学弱狗2 小时前
链式法则解释上游梯度应用
开发语言·前端·javascript
小清兔5 小时前
c#基础知识
开发语言·数据库·学习·unity·c#·游戏引擎·.net
奇某人6 小时前
【语法】【C+V】本身常用图表类型用法快查【CSDN不支持,VSCODE可用】
开发语言·vscode·markdown·mermaid
烛阴6 小时前
解锁 TypeScript 的元编程魔法:从 `extends` 到 `infer` 的条件类型之旅
前端·javascript·typescript
做一位快乐的码农7 小时前
php程序设计之基于PHP的手工艺品销售网站/基于php在线销售系统/基于php在线购物商城系统
开发语言·php
前端开发爱好者7 小时前
弃用 ESLint + Prettier!快 35 倍的 AI 格式化神器!
前端·javascript·vue.js
wayhome在哪7 小时前
Cropper.js 轻松拿捏前端裁剪🤞
javascript·canvas·设计
&白帝&7 小时前
vue2和vue3的对比
javascript·vue.js·ecmascript
江东大都督周总7 小时前
rabbitmq集群
javascript·rabbitmq·ruby
@珍惜一生@7 小时前
Qt开源库
开发语言·qt·开源