npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

koa2-file-server

v0.0.3

Published

file serving middleware for koa2

Downloads

13

Readme

静态文件服务 for koa2

静态文件服务,除却基本文件服务,增加了图片处理,请求合并,文本文件gzip压缩等功能。因为使用了 async,所以需要 babel 来运行。

安装使用

安装图片处理软件 ImageMagick

npm install koa2-file-server --save

//babel.app.js
require("babel-core/register")({
    presets: ['es2015-node5', 'stage-3'],
    ignore: function (fileName) {
        return /\/node_modules\//.test(fileName) && !/\/node_modules\/koa2-file-server\//.test(fileName);
    }
});
require('./app.js');
//app.js
"use strict";

const Koa = require('Koa');
const path = require('path');
const serve = require('koa2-file-server');

const app = new Koa();

app.use(serve(path.join(__dirname, 'public'),{
    webp: true,
    identifier: '??',
    maxAge: 60 * 60 * 24 * 30,
    cache: {
        dirName: '__cache',
        maxAge: 1000 * 60 * 60,
        maxSize: 1024 * 1024 * 500
    }
}));

app.listen(8000);

配置选项

  • root 静态文件根目录,默认值: process.cwd()
  • webp 是否在支持webp的客户端下返回webp格式的图片,默认值: true
  • identifier 文件合并请求标识符,默认值: ??
  • maxAge 浏览器缓存时间,单位秒,默认值: 2592000 s
  • cache 服务器缓存
    • dirName 持久化文件存放目录名,默认: __cache
    • maxAge 缓存最高存放时间,单位毫秒,默认: 3600000 ms
    • maxSize 缓存总大小上限,当达到上限后会清理所以缓存,单位字节,默认: 524288000 Byte

文件合并接口

说明:只支持 .js.css 文件

标识符: ??

分隔符: ,

合并请求: http://localhost:3000/test/??a.js,b.js or http://localhost:3000/??test/a.js,test/b.js

图片处理接口规格

说明:对GIF图片处理操作无效,会直接返回原图。

imageView/auto-orient
         /thumbnail/<imageSizeGeometry>
         /strip
         /gravity/<gravityType>
         /crop/<imageSizeAndOffsetGeometry>
         /rotate/<rotateDegree>
         /format/<destinationImageFormat>
         /blur/<radius>x<sigma>
         /interlace/<Interlace>
         /quality/<quality>

参数名称 | 说明 ------------------------------------ | ------------------------------------------------------------------------------------ /auto-orient | 建议放在首位,根据原图EXIF信息自动旋正,便于后续处理。 /thumbnail/<imageSizeGeometry> | 参看缩放操作参数表,默认为不缩放。 /strip | 去除图片中的元信息去掉的信息有:bKGD、cHRM、EXIF、gAMA、iCCP、iTXt、sRGB、tEXt、zCCP、zTXt、date /gravity/<gravityType> | 参看图片处理重心参数表,目前只影响其后的裁剪偏移参数,默认为左上角NorthWest/crop/<imageSizeAndOffsetGeometry> | 参看裁剪操作参数表,默认为不裁剪。 /rotate/<rotateDegree> | 旋转角度,取值范围为1-360,默认为不旋转。 /format/<destinationImageFormat> | 图片格式,支持jpeg、gif、png、webp、tiff、bmp、svg,默认为原图格式。 /blur/<radius>x<sigma> | 高斯模糊参数,<radius>是模糊半径,取值范围为1-50。<sigma>是正态分布的标准差,必须大于0。 /interlace/<Interlace> | 取值1,创建一个交错PNG或渐进显示的JPEG图像。 /quality/<Quality> | 新图的图片质量,取值范围是[1, 100]。支持图片类型:jpeg,png,tiff

缩放操作参数表

参数名称 | 说明 ------------------------------ | ------------------------------------------------------------------- /thumbnail/<Scale>p | 基于原图大小,按指定百分比缩放。取值范围为0-1000。 /thumbnail/<Scale>pw | 以百分比形式指定目标图片宽度,高度不变。 /thumbnail/<Scale>ph | 以百分比形式指定目标图片高度,宽度不变。 /thumbnail/<Width>v | 当原图宽度小于指定宽度则不变,反之按宽度等比例缩放。 /thumbnail/<Width>x | 指定目标图片宽度后高度等比缩放。 /thumbnail/x<Height> | 指定目标图片高度后宽度等比缩放。 /thumbnail/<Width>x<Height> | 限定长边,短边自适应缩放,将目标图片限制在指定宽高矩形内。 /thumbnail/<Width>x<Height>r | 限定短边,长边自适应缩放,目标图片会延伸至指定宽高矩形外。 /thumbnail/<Width>x<Height>! | 限定目标图片宽高值,忽略原图宽高比例,按照指定宽高值强行缩略,可能导致目标图片变形。 /thumbnail/<Width>x<Height>> | 当原图尺寸大于给定的宽度或高度时,按照给定宽高值缩小。 /thumbnail/<Width>x<Height>< | 当原图尺寸小于给定的宽度或高度时,按照给定宽高值放大。 /thumbnail/<Area>@ | 按原图高宽比例等比缩放,缩放后的像素数量不超过指定值。

图片处理重心参数表

注意:该选项只影响其后的裁剪操作,即裁剪操作以gravity为原点开始偏移后,进行裁剪操作。

参数名称 | 参数值 ---- | --------- 左上角 | NorthWest 正上方 | North 右上角 | NorthEast 正左方 | West 正中 | Center 正右方 | East 左下角 | SouthWest 正下方 | South 右下角 | SouthEast

裁剪操作参数表

参数名称 | 说明 -------------------------------- | ----------------------------------------------- /crop/<Width>x | 指定目标图片宽度,高度不变。 /crop/x<Height> | 指定目标图片高度,宽度不变。 /crop/<Width>x<Height> | 同时指定目标图片宽高。 /crop/<Width>x<Height>a<x>a<y> | 同时指定目标图片宽高。相对于偏移锚点,向右偏移x个像素,同时向下偏移y个像素。

缓存处理

为了减少磁盘io,对文件进行了缓存。如果文件在缓存有效期内被改变,只能清除缓存,否则请求没有任何改变。

staticCache API 缓存key: filePath

"use strict";

import path from 'path';
import Koa from 'koa';
import serve,{staticCache} from 'koa2-file-server';

const app = new Koa();

app.use(serve(path.join(__dirname, 'public')));
staticCache.reset(); //清除所有缓存
staticCache.del('key'); //清除指定缓存

app.listen(8000);

图片处理后的图片会持久化存放,只好定期清除__cache目录下的文件,不然磁盘占有量会越来越大。