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

参考文章

相关推荐
everyStudy19 分钟前
JS中判断字符串中是否包含指定字符
开发语言·前端·javascript
luthane20 分钟前
python 实现average mean平均数算法
开发语言·python·算法
Ylucius28 分钟前
动态语言? 静态语言? ------区别何在?java,js,c,c++,python分给是静态or动态语言?
java·c语言·javascript·c++·python·学习
凡人的AI工具箱39 分钟前
AI教你学Python 第11天 : 局部变量与全局变量
开发语言·人工智能·后端·python
200不是二百43 分钟前
Vuex详解
前端·javascript·vue.js
sleP4o43 分钟前
Python操作MySQL
开发语言·python·mysql
是店小二呀1 小时前
【C++】C++ STL探索:Priority Queue与仿函数的深入解析
开发语言·c++·后端
LvManBa1 小时前
Vue学习记录之三(ref全家桶)
javascript·vue.js·学习
洛寒瑜1 小时前
【读书笔记-《30天自制操作系统》-23】Day24
开发语言·汇编·笔记·操作系统·应用程序
ephemerals__1 小时前
【c++】动态内存管理
开发语言·c++