读vite源码之sirv

368 阅读1分钟

在vite的源码src/node/preview.ts中,有import sirv from 'sirv' 的代码, 所以就单独查下这个npm包的用法。

下面给出一个较详细的sirv使用教程:

安装

npm install -g sirv

命令行参数

sirv [path] [options]

path: 需要serve的目录(默认当前目录)

可选项:

  • -p, --port: 端口号(默认端口5000)

  • -s, --single: 单页应用模式

  • -e, --empty-path: 移除index文件的路由

  • -c, --no-cache: 禁用缓存

  • -a, --assets: 仅serve静态资源,不编译js/css

  • -i, --index: 指定index文件(默认index.html)

  • -w, --watch: 监视文件变更并live reload

  • -r, --rewrite: 重写路径规则(默认hash路由)

  • -b, --browse: 启动浏览器

  • -h, --help: 查看帮助

使用示例

sirv 

默认port:5000,目录:当前目录

sirv docs

serve文档目录docs

sirv build -p3000

serve编译目录,设定port为3000

sirv src -e

serve源码目录,index路径重定向

sirv public -a

只serve静态资源目录public

变更监听

sirv src -w

监听文件变更并live reload

OK,根据sirv package的npm文档,将主要API的用法用例子表示如下:

sirv

sirv(options)

返回一个Server实例:

const sirv = require('sirv');
const server = sirv({
  src: 'public',
  port: 8080
});

server.listen(port, callback)

启动服务器:

server.listen(8080, () => {
  console.log('Listening on 8080');
});

server.getRoute(url)

获取url对应的文件路由:

const route = server.getRoute('/about.html');

server.use(fn)

添加中间件:

server.use((req, res, next) => {
  // ...
  next();
});

server.set('etag', false)

设置etag标识:

server.set('etag', false);

server.rewrites

重写规则:

server.rewrites.push({
  source: '/old-page', 
  target: '/new-page'
});

等等,这些都是sirv API的主要用法,通过例子来说明具体怎么使用。希望可以帮助理解sirv!