ESbuild打包器基于Golang开发,优点在于可多线程打包,直接编译成机器码,ESbuild提供的api可在JavaScript和golang使用,连Vite在很多场景都依赖了ESbuild打包(viet在开发环境下使用这个),支持TypeScript和jsx(tsx),css
ESbuild支持ES6模块,cjs模块,对ES6+语法支持性好,可以直接打包css文件,json文件,ts文件
注意:esbuild并不对ts文件进行类型检查工作
安装
npm install esbuild
或者
yarn add esbuild
打包
.\node_modules.bin\esbuild app.jsx –outfile=build/index.js –bundle
或者
npx esbuild app.jsx –outfile=build/index.js –bundle
或者package.json
“build”: “esbuild app.jsx –outfile=build/index.js –bundle”
npm run build
或者
yarn build
例子(app.jsx)
import React from 'react'
import ReactDOM from 'react-dom'
const App = () => {
return (
<div>
<h1>Hallo, Esbuild!</h1>
</div>
)
}
ReactDOM.render(
<App />,
document.getElementById("app")
)
index.html
<div id="app"></div>
<script src="./build/index.js"></script>
我本地打包只花64ms就打包好了
使用source map功能
npx esbuild app.jsx –outfile=build/index.js –bundle –sourcemap
使用代码压缩功能–minify
npx esbuild app.jsx –outfile=build/index.js –bundle –minify
指定打包目标环境
npx esbuild app.jsx –outfile=build/index.js –bundle –target=es2020,node12
注意:如果将ES6+语法编译成ES5语法是不被支持的,但是可以将ES5语法编译成ES6+的语法或者ES6语法升级为更先进的语法,也可以将ES6+语法降到ES6语法,就是不能降到ES5(估计这是为啥vite选择这个作为开发环境打包工具,而不是生产环境打包工具的原因吧,只有开发环境下,默认认为是现代浏览器(node)环境下工作的)
指定输出目标
npx esbuild app.jsx –outfile=build/index.js –bundle –target=es2020,node12 –platform=node
–platform有3个值,分别是browser,node,neutral
默认情况下使用browser值,会将打包的代码放到IIFE(立即执行函数)中,并且对package.json依赖做出修改,会使用对目标友好的插件或者包来代替原来的
设置为node时,打包格式是cjs格式(CommonJS),会将其他风格转换为cjs格式
设置为neutral时,打包格式为esm格式
指定不进行打包构建的模块
npx esbuild app.jsx –outfile=build/index.js –bundle –platform=node –external:react
esbuild.config.js,api调用文件
const postCssPlugin = require('@deanc/esbuild-plugin-postcss')
const autoprefixer = require('autoprefixer')
const esbuildConig = () => require('esbuild').buildSync({
entryPoints: ['src/app.jsx'],
bundle: true,
target: ['es2020','node12'],
external: ['react'],
loader: {'.jpg':'dataurl','.js':'jsx'},
platform: 'node',
outfile: 'build/index.js',
plugins: [
postCssPlugin({
plugins: [autoprefixer]
})
],
})
esbuildConig()
通过执行node ./esbuild.config.js,来调用ESbuild API快速打包 当然也是可以使用npm script来设置
"scripts": {
"build": "node ./esbuild.config.js"
}
npm run build
或者
yarn build
添加图片支持(通过转换成base64的方法来引用)
npx esbuild app.jsx –outfile=build/index.js –bundle –loader:.jpg=dataurl
添加tsx支持(可以把tsx文件转换为普通的js文件)
npx esbuild app.tsx –outfile=build/index.js –bundle –loader:.js=jsx
esbuild社区插件库:https://github.com/esbuild/community-plugins