koa-assets
v0.2.6
Published
最好用的assets代理工具,请与koa-join和koa-charset等其他中间件配合使用。
Downloads
13
Readme
koa-assets
介绍
基于koa的前端开发环境中间件,最好用的前端本地调试映射工具,请与koa-join、koa-charset等其他中间件配合使用。
安装
koa 依赖支持 generator 的 Node 环境,准确来说,是 node >= 0.11.9
的环境。
$ npm install koa-join
$ npm install koa-assets
请务必使用node --harmony
模式运行程序,例如:
$ node --harmony index.js
为了方便,可以将在你的.bash_profile中将node
设置为默认启动harmony
模式的别名:
alias node='node --harmony'
Example
index.js
var koa = require('koa');
var join = require('koa-join');
var assets = require('koa-assets');
var app = koa();
app.use(join()); //koa-join 用来将combo请求分解成多个url
app.use(assets({
urls: [{
rule: /tm\/([\S]+?)\/[\d\.]+/,
dest: '~/dev/tm/$1'
}]
}));
app.listen(80);
hosts绑定
在使用koa-assets进行本地调试时,请将g.tbcdn.cn
和g.assets.daily.taobao.net
绑定到本地ip 127.0.0.1上。
127.0.0.1 g.tbcdn.cn
127.0.0.1. g.assets.daily.taobao.net
运行
$ node --harmony index.js #mac下监听80端口可能需要sudo权限
使用说明
文件查找
koa-assets将assets url请求捕获,并通过可配置的规则,映射到用户本地目录,方便开发和调试。以上面的Example为例,当我们访问:
http://g.tbcdn.cn/tm/detail/1.5.53/app.css
koa-assets的目录查找顺序依次是:
=> ~/dev/tm/detail/src/app.css
=> ~/dev/tm/detail/build/app.css
=> ~/dev/tm/detail/app.css
=> http://10.235.136.37/tm/detail/1.5.53/app.css
当然,只要用其中的一种方式找到了文件,就不会用其他方式继续查找。
配置
urls:匹配和映射规则
rule
:匹配的url规则,支持正则和字符串dest
:映射的目标目录
使用案例
案例1:正则
[{
rule: /tm\/detail\/[\d\.]+/,
dest: '~/dev/tm/detail'
}]
案例2:正则
[{
rule: /tm\/detail\/[\d\.]+/,
dest: function($){
console.log($);
return '~/dev/tm/detail';
}
}]
案例3:字符串
[{
rule: 'tm/detail/1.5.53',
dest: '~/dev/tm/detail'
}]
hosts:线上服务器ip
本地不存在的文件,会到通过请求线上服务器获取,例如koa-assets的默认配置:
{
'g.tbcdn.cn': '10.235.136.37',
'g.assets.daily.taobao.net': '10.235.136.37'
}
可以将g.tbcdn.cn指向线上服务器ip地址,例如:
{
'g.tbcdn.cn': '115.238.23.250',
}
编码设定
输入编码
读取映射目录文件的文件编码,默认以utf-8
方式读入。当目录文件编码不为utf-8
时,可以通过设置inputCharset
字段来让koa-assets进行文件读取时的自动转码,例如:
[{
rule: 'tm/detail/1.5.53',
dest: '~/dev/tm/detail',
inputCharset: 'gbk'
}]
输出编码
也叫响应编码。koa-join和koa-assets响应的默认编码是utf-8
,如需定制具体某些请求的响应编码可通过koa-charset中间件进行编码设定和字符编码转换,例如:
//用在koa-join和koa-assets之前
app.use(function *(next){
yield next;
//对指定url的请求设置成gbk编码
if(this.url.indexOf('tm/buy') !== -1){
this.charset = 'gbk';
}
});
app.use(join());
app.use(assets());
//...
License
MIT