老规矩,小手动起来~点赞关注不迷路!
esbuild简单介绍
esbuild
为了突破了JavaScript
语言的瓶颈,采用了Go
语言编写,构建速度与同代码量下的webpack
对比提升在10
倍以上,开创了构建工具性能的新时代。
它的中文文档,本人正在不断的更新完善中,欢迎大家关注阅读!
Supported by: Build
如果你想让你的应用程序在编辑时自动重新加载,你应该阅读实时重载(Live reload)相关的内容。它将服务模式与监视模式相结合,以侦听对文件系统的更改。
服务模式会启动一个web服务器
,将您的代码提供给电脑上的浏览器。这里有一个例子,它将src/app.ts
绑定到www/js/app.js
中,然后还通过http://localhost:8000/
提供服务:
esbuild src/app.ts --outdir=www/js --bundle --servedir=www
如果您创建了包含以下内容的www/index.html
文件,那么当您访问http://localhost:8000/
时,src/app.ts
文件中的代码将被加载:
<script src=“js/app.js”>script>
使用esbuild
的内置web
服务器而不是新启另一个web
服务器的一个好处是,无论何时重新加载,esbuild
提供的文件都是最新的。其他服务器的开发配置不一定是这样的。一种最常见的配置是运行本地文件监听器,每当输出文件对应的输入文件发生更改时,该监听器就会重新构建输出文件,然后单独运行本地文件服务器来为这些输出文件提供服务。但这意味着,如果重建
尚未完成,编辑后重新加载可能会加载到旧的输出文件。对于esbuild
的web
服务器,如果尚未进行重建,则每个传入的请求都会启动重建,然后等待当前重建完成后再提供文件。这意味着esbuild
永远不会提供老版本的构建结果。
请注意,此web服务器仅用于开发。请勿在生产中使用。
Serve API有以下几个参数:
# Enable serve mode
--serve
# Set the port
--serve=9000
# Set the host and port (IPv4)
--serve=127.0.0.1:9000
# Set the host and port (IPv6)
--serve=[::1]:9000
# Set the directory to serve
--servedir=www
# Enable HTTPS
--keyfile=your.key --certfile=your.cert
# Specify a fallback HTML file
--serve-fallback=some-file.html
esbuild
创建的web
服务器在所有IPv4网络接口上可用。这对应于0.0.0.0
的主机地址。如果您想配置不同的主机(例如,只在127.0.0.1
环回接口上提供服务,而不向网络公开任何内容),可以使用此参数指定主机。IPv6
而不是IPv4
,你只需要指定一个IPv6
主机地址。等效于IPv6
中的127.0.0.1
环回接口为::1
,等效于IPv6
的0.0.0.0
通用接口为::
。HTTP
端口可以选择在此处进行配置。如果省略,它将默认为一个开放端口,首选端口范围在8000
到8009
之间。404
。这样您就可以将esbuild
用作通用的本地web服务器。index.html
文件,然后将servedir
设置为“.”
以服务于当前目录(包括index.html
文件)。如果不设置servedir
,那么esbuild
将只提供生成结果,而不提供任何其他文件。keyfile 和 certfile
如果使用keyfile
和certfile
将私钥和证书传递给esbuild
,那么esbuild
的web服务器将使用https://协议
而不是http://协议
。有关详细信息,请参阅启用HTTPS章节内容。
fallback
当传入的请求与生成的所有输出文件路径都不匹配时,可以提供一个供esbuild
的HTTP
服务器使用的HTML
文件,这样可以避免404
。您可以将其用于自定义的“not found”页面。您还可以将其用作单页应用
的入口点。
CLI
工具使用此回调来打印每个请求的日志信息。时间字段是为请求生成数据的时间,但不包括将请求流式传输到客户端的时间。esbuild
前面放一个代理。# The CLI will print the host and port like this:
> Local: http://127.0.0.1:8000/
host:服务的主机ip
port:服务的端口
默认情况下,esbuild
的web服务器使用http://
协议。但是,某些现代web
功能对于HTTP
网站来说是不可用的。如果你想使用这些功能,那么你需要告诉esbuild
使用https://
协议。
要使用esbuild
启用HTTPS,请执行以下操作:
openssl
命令:openssl req -x509 -newkey rsa:4096 -keyout your.key -out your.cert -days 9999 -nodes -subj /CN=127.0.0.1
使用keyfile
和certfile
服务参数将.key
和.cert
传递给esbuild
。
加载页面时,点击忽略浏览器中的warning
警告(自签名证书是不安全的,但这无关紧要,因为我们只是在进行本地开发)。
如果您有比这更复杂的需求,您仍然可以在esbuild
前面放置一个代理,并将其用于HTTPS
。请注意,如果在加载页面时看到消息Client sent an HTTP request to an HTTPS server
,则说明您使用的协议不正确。需要将浏览器URL
栏中的http://
替换为https://
。
请记住,esbuild
的HTTPS
支持与安全性无关。在esbuild
中启用HTTPS的唯一原因是,浏览器使得在不跳过这些额外的障碍的情况下,无法使用某些现代web功能进行本地开发。请不要将esbuild
的开发服务器用于任何需要安全的内容。它只用于本地开发,没有考虑任何生产环境。
esbuild
的本地服务器来自定义服务器行为是不可能的。相反,应该通过在esbuild前面放置一个代理来定制行为。
下面是一个简单的代理服务器示例,它使用node
内置的http
模块。它添加了一个自定义的404
页面,而不是esbuild
的默认404
页面:
import * as esbuild from 'esbuild'
import http from 'node:http'
// Start esbuild's server on a random local port
let ctx = await esbuild.context({
// ... your build options go here ...
})
// The return value tells us where esbuild's local server is
let { host, port } = await ctx.serve({ servedir: '.' })
// Then start a proxy server on port 3000
http.createServer((req, res) => {
const options = {
hostname: host,
port: port,
path: req.url,
method: req.method,
headers: req.headers,
}
// Forward each incoming request to esbuild
const proxyReq = http.request(options, proxyRes => {
// If esbuild returns "not found", send a custom 404 page
if (proxyRes.statusCode === 404) {
res.writeHead(404, { 'Content-Type': 'text/html' })
res.end('A custom 404 page
')
return
}
// Otherwise, forward the response from esbuild to the client
res.writeHead(proxyRes.statusCode, proxyRes.headers)
proxyRes.pipe(res, { end: true })
})
// Forward the body of the request to esbuild
req.pipe(proxyReq, { end: true })
}).listen(3000)
这段代码在本地一个随机端口上启动esbuild的服务器,然后在端口3000
上启动代理服务器。在开发过程中,您将加载http://localhost:3000
在您的浏览器中,它与代理进行对话。此示例演示了在esbuild
处理完请求后修改响应,但您也可以在esuild
处理请求之前修改或替换请求。
你可以用这样的代理做很多事情,包括:
注入你自己的404页面(上面的例子)
自定义路由到文件系统上文件的映射
将某些路由重定向到API服务器,而不是esbuild
如果你有更高级的需求,你也可以使用真正的代理,比如nginx
。
笔者根据esbuild
文档搭建了一套简洁的ts
开发脚手架工程,编译速度非常快!脚手架还整合了eslint
,另一篇文章还附带了调试教程,需要的朋友看这里:esbuild配合vscode搭建的ts开发环境,这编译速度,真香
另外,esbuild中文文档专栏,本人目前正在翻译整理,关注我,有最新的翻译文档会第一时间通知你!
(本文完)
励志前端小黑哥,全网唯一账号!
关注我,带你了解更多前端知识!