canvas

CanvasRenderingContext2D

  • ctx.clearRect();
  • ctx.fillRect();
  • ctx.strokeRect();

Property

Text Property

  • ctx.font

    @default: “10px sans-serif”;

  • ctx.textAlign

    @enum : start, end, left, right, center;
    @default : start;

  • ctx.textBaseline

    @enum: top, hanging, middle, alphabetic, ideographic, bottom
    @default: alphabetic

  • ctx.direction

    @enum: ltr, rtl, inherit
    @default: inherit

  • Shadow Property

  • ctx.shadowBlur

    @default: 0

  • ctx.shadowColor

    @default: ‘rgba(0,0,0,0)’

  • ctx.shadowOffsetX

  • @default: 0

  • ctx.shadowOffsetY

  • @default: 0

  • Graphics Property

  • ctx.fillStyle

    @default: #000

  • ctx.strokeStyle

    default: #000

  • Line Property

  • ctx.lineWidth

    @defalt: 1.0

  • ctx.lingCap

    @default: butt
    @enum: butt, round, square

  • ctx.lineJoin

    @default: miter
    @enum: miter, round, blevel

  • ctx.miterLimit

    @description:
    @default: 10

  • ctx.lineDashOffset

    @default: 0.0

  • ctx.fillText(text, x, y, maxWidth);

  • ctx.strokeText(x, y);
  • ctx.measureText();

Webpack 插件

什么是 Webpack 插件

插件是对 javascript 代码进行逻辑处理的模块。

Config 配置型插件

1
2
3
4
5
6
new webpack.NormalModuleReplacementPlugin(
resourceRegExp,
newResource
// 如果是相对路径,则是相对于被替换模块的位置;
// 也可以是一个函数。
)

关于 context,详见文档

1
2
3
4
5
6
new webpack.ContextReplacementPlugin(
resourceRegExp,
[newContentResource],
[newContentRecursive],
[newContentRegExp]
)

1
2
3
4
new webpack.IgnorePlugin(
requestRegExp,
[contextRegExp]
)

预加载模块以提升性能。

1
2
3
4
5
6
new webpack.PrefetchPlugin(
[context],
// 预加载的绝对路径
request
// 引入模块的字符串
)

1
2
3
4
5
new webpack.ResolverPlugin(
[plugins],
[types]
// 可选值:normal, context, loader
)
1
2
3
new webpack.ResolverPlugin.FileAppendPlugin(
[plugins]
)
1
2
3
4
5
new webpack.ResolverPlugin([
new webpack.ResolverPlugin.FileAppendPlugin(
['/dist/compiled-moduled.js']
)
])

设置可以通过 process.env 获取的环境变量。

1
2
3
4
5
new webpack.EnvironmentPlugin([
"NODE_ENV"
])
// e.g:
var env = process.env.NODE_ENV;

Output 输出型插件

在打包后的块文件顶部添加额外内容。

1
2
3
4
5
6
7
new webpack.BannerPlugin(
banner,
// 写在注释里面的字符串。
options
// options.raw:设置为 true 时,则不会写在评论里。
// options.entryOnly:是否只添加到入口文件。
)

Optimize 优化型插件

将文件去重以减小打包文件。去重后的模块只存在一个实例。

1
2
3
new webpack.optimize.DedupePlugin(
[files]
)

不建议在开发模式中运用。

设置生成的块文件的最大数目。超过的文件会合并起来。

1
2
3
4
5
6
new webpack.optimize.LimitChunkCountPlugin(
options
// options.maxChunks
// options.chunkOverhead
// options.entryChunkMultiplicator
)

将阈值以下的块文件合并。

1
2
3
4
new webpack.optimize.MinChunkSizePlugin(
options
// options.minChunkSize
)

1
2
3
4
new webpack.optimize.OccurrenceOrderPlugin(
preferEntry
//
)

Webpack

Configuration

context

entry 的基本目录。默认是process.cwd()


entry

解析的入口文件。

1
2
3
4
5
6
7
8
9
10
{
entry: {
page1: "./page1",
page2: ["./entry1", "./entry2"]
},
output: {
filename : "[name].bundle.js",
chunkFilename : "[id].bundle.js"
}
}

output

打包后的文件名。

可替代变量名:[hash]这次打包的哈希值,[name],[chunkhash]文件哈希值

打包文件放置的绝对路径。

可替代变量名:[hash]

输出的文件在浏览器中的公共路径URL。

比如加载器loader解析后的内联标签<script>,<link>,文件中的src,url()等,当静态文件部署在cdn中的时候,这个参数非常有用。可替代变量名:[hash]

非入口文件相对于output.path的路径。

可替代变量名:[id],[name],[hash],[chunkhash]

代码映射文件的文件名。

可替代变量名:[id],[name],[hash]Default: "[file].map"

是否开启模块的注释。

Default: false

库文件的导出(export)变量名。

如果设置了该参数,则会把输出当做一个库文件(library)。

对于公共文件(如react)打包成库文件是一个比较好的选择。

库文件的导出(export)格式。

Default: "var"

type value resulting import code
var ‘abc’ module.exports = abc;
var ‘abc.def’ module.exports = abc.def;
this ‘abc’ (function() { module.exports = this[‘abc’]; }());
this [‘abc’, ‘def’] (function() { module.exports = this[‘abc’][‘def’]; }());
commonjs ‘abc’ module.exports = require(‘abc’);
commonjs2 [‘abc’, ‘def’] module.exports = require(‘abc’).def;
amd ‘abc’ define([‘abc’], function(X) { module.exports = xxx; })
umd ‘abc’ everything above

跨域加载文件参数。false (default) | anonymous | use-credentials

1
2
3
4
5
6
7
output: {
filename : '[name].[hash:3].js',
path : path.join(__dirname, 'static'),
publicPath : path.join(__dirname, 'static'),
pathinfo : true,
library : 'library.[hash:3]',
}

module

定义对模块处理的工具和逻辑。

自动加载的转换非 javascript 文件的模块,如 css-loader, jsx-loader 等。

webpack 只能解析 javascript 语法,所以要通过 loader 转换成 javascript 可解析的内容。

参数 解释
test 匹配文件名,String|RegExp|Mixed with ‘and’
exclude 排除目录
include 包含目录
loader loader 列表字符串,通过 ! 连接,加载顺序从右至左
loaders loader 列表数组

module.loaders 加载之前加载的 loaders。

匹配不进行 loader 解析的文件。RegExp|[RegExp]

1
2
3
4
5
6
7
8
9
10
11
module: {
loaders: [
{
test : /\.styl$/,
loader : 'css!stylus'
}
],
noParse: [
/test\.styl/
]
}

resolve

官方文档

定义模块别名字典(替代名)。

当以 $ 结尾时,只有完全匹配才会被替代。

alias require(‘xyz’) require(‘xyz/file.js’)
{ xyz: “modu” } node_modules/modu/index.js node_modules/modu/file.js
{ xyz$: “modu” } node_modules/modu/index.js node_modules/xyz/file.js
{ xyz: “modu/dir” } node_modules/modu/dir/index.js node_modules/dir/file.js
{ xyz$: “modu/dir” } node_modules/modu/dir/index.js node_modules/modu/file.js

模块搜索的 绝对路径(数组)。

辨析:当需要层级搜索的时候,用 resolve.modulesDirectories

模块搜索的 文件夹(数组)。

搜索的方式与 nodejs 一样:’./node_modules’, ‘../node_modules’ … 。

Default: [“web_modules”, “node_modules”]

也是搜索模块的绝对路径(数组)。

resolve.rootresolve.modulesDirectories 均没有找到的时候在该目录搜索。

搜索模块时匹配的后缀名(数组)。

Default: [‘’, ‘.webpack.js’, ‘.web.js’, ‘.js’]。

设置该参数的时候将会覆盖默认参数,并且要使require('./index.js')可以被正确引入,则必须加入空字符串 ‘’

1
2
3
4
5
6
7
8
9
10
11
resolve: {
alias: {
jquery: './lib/jquery.js'
},
root: [
path.resolve('./app/modules'),
path.resolve('./vendor/modules')
],
modulesDirectories: ['node_modules', 'web_modules'],
extensions: ['', '.js', '.styl', '.css'],
}

resolveLoader

针对 loadersresolve,拥有 resolve 的全部参数。

loaders 名的匹配模板(数组)。

Default: [‘*-webpack-loader’, ‘*-web-loader’, ‘*-loader’, ‘*‘]


externals

指定不需要被 webpack 打包的依赖。

依赖的类型由 output.libraryTarget 决定。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
{
output: { libraryTarget: "commonjs" },
externals: [
{
a: false, // a is not external
b: true, // b is external (require("b"))
"./c": "c", // "./c" is external (require("c"))
"./d": "var d" // "./d" is external (d)
},
// Every non-relative module is external
// abc -> require("abc")
/^[a-z\-0-9]+$/,
function(context, request, callback) {
// Every module prefixed with "global-" becomes external
// "global-abc" -> abc
if(/^global-/.test(request))
return callback(null, "var " + request.substr(7));
callback();
},
"./e" // "./e" is external (require("./e"))
]
}

target

定义打包后的代码运行的环境。默认为 浏览器或类浏览器 环境。

类型 解释
‘web’ Compile for usage in a browser-like environment (default)
‘webworker’ Compile as WebWorker
‘node’ Compile for usage in a node.js-like environment (use require to load chunks)
‘async-node’ Compile for usage in a node.js-like environment (use fs and vm to load chunks async)
‘node-webkit’ Compile for usage in webkit, uses jsonp chunk loading but also supports builtin node.js modules plus require(“nw.gui”) (experimental)
‘electron’ Compile for usage in Electron – supports require-ing Electron-specific modules.

bail

Report the first error as a hard error instead of tolerating it.


profile

捕获模块时间信息。


cache

缓存模块以提高性能,在 dev 模式下默认打开。


watch

进入监视模式。


watchOptions

设置打包延时时间(ms)。

Default: 300

>


debug

loader 切换到 debug 模式。


devtool

设置 debug 工具。

devtool build speed rebuild speed production supported quality
eval +++ +++ no generated code
cheap-eval-source-map + ++ no transformed code (lines only)
cheap-source-map + o yes transformed code (lines only)
cheap-module-eval-source-map o ++ no original source (lines only)
cheap-module-source-map o - yes original source (lines only)
eval-source-map - + no original source
source-map - - yes original source

loader

提供给 加载器 上下文的自定义值。

plugins

插件模块介绍

给整个编译提供的插件模块。

注意加载器插件 的不同。前者只是将非 javascript 资源转换成 javascript 内容;后者则是对 javascript 代码的逻辑处理。

商君书-农战

凡人主之所以劝民者,官爵也;国之所以兴者,农战也。今民求官爵,皆不以农战,而以巧言虚道,此谓劳民。劳民者,其国必无力;无力者,其国必削。

善为国者,其教民也,皆作壹而得官爵,是故不官无爵。国去言,则民朴;民朴,则不淫。民见上利之从壹空出也,则作壹;作壹,则民不偷营;民不偷营,则多力;多力,则国强。今境内之民皆曰:“农战可避,而官爵可得也。”是故豪杰皆可变业,务学《诗》、《书》,随从外权,上可以得显,下可以求官爵;要靡事商贾,为技艺,皆以避农战。具备,国之危也。

民以此为教者,其国必削。

善为国者,仓廪虽满,不偷于农;国大,民众,不淫于言。则民朴壹。

民朴壹,则官爵不可巧而取也。不可巧取,则奸不生。奸不生,则主不惑。

今境内之民及处官爵者,见朝廷之可以巧言辩说取官爵也,故官爵不可得而长也。是故进则曲主,退则虑私,所以实其私,然则下卖权矣。夫曲主虑私,非国利也,而为之者,以其爵禄也;下卖权,非忠臣也,而为之者,以末货也。然则下官之冀迁者皆曰:“多货,则上官可得而欲也。”曰:“我不以货事上而求迁者,则如以狸饵鼠尔,必不冀矣;若以情事上而求迁者,则如引诸绝绳而求乘枉木也,愈不冀矣。二者不可以得迁,则我焉得无下动众取货以事上而以求迁乎?”百姓曰:“我疾农,先实公仓,收余以食亲;为上忘生而战,以尊主安国也。仓虚,主卑,家贫。然则不如索官。”亲戚交游合,则更虑矣。豪杰务学《诗》、《书》,随从外权;要靡事商贾,为技艺,皆以避农战。民以此为教,则粟焉得无少,而兵焉得无弱也?

商君书-垦令

无宿治,则邪官不及为私利于民。而百官之情不相稽,则农有余曰;邪官不及为私利于民,则农不败。农不败而有余日,则草必垦矣。

訾粟而税,则上壹而民平。上壹,则信;信,则臣不敢为邪。民平,则慎;慎,则难变。上信而官不敢为邪,民慎而难变,则下不非上,中不苦官。

下不非上,中不苦官,则壮民疾农不变。壮民疾农不变,则少民学之不休。

少民学之不休,则草必垦矣。

无以外权爵任与官,则民不贵学问,又不贱农。民不贵学,则愚;愚,则无外交;无外交别则国安不殆。民不贱农,则勉农而不偷,则草必垦矣。

禄厚而税多,食口众者,败农者也。则以其食口之数贱而重使之,则辟淫游惰之民无所于食。民无所于食,则必农;农,则草必垦矣。

使商无得籴(dí,买进粮食,与“粜”相对),农无得粜(tiào),则窳(yù,恶劣)惰之农勉疾。商不得籴,则多岁不加乐。多岁不加乐,则饥岁无裕利。无裕利,则商怯;商怯,则欲农。

窳惰之农勉疾,商欲农,则草必垦矣。

声服无通于百县,则民行作不顾,休居不听。休居不听,则气不淫。行作不顾,则意必壹。意壹而气不淫,则草必垦矣。

无得取庸,则大夫家长不建缮,爱子不惰食,惰民不窳,而庸民无所于食,是必农。大夫家长不建缮,则农事不伤。爱子、惰民不窳,则故田不荒。

农事不伤,农民益农,则草必垦矣。

废逆旅,则奸伪、躁心、私交、疑农之民不行,逆旅之民无所于食,则必农。农,则草必垦矣。

贵酒肉之价,重其租,令十倍其朴,然则商贾少,农不能喜酣奭,大臣不为荒饱。商贾少,则上不费粟。民不能喜酣奭,则农不慢。大臣不荒,则国事不稽,主无过举。上不费粟。民不慢农,则草必垦矣。

重刑而连其罪,则褊急之民不斗,很刚之民不讼,怠惰之民不游,费资之民不作,巧谀、恶心之民无变也。五民者不生于境内,则草必垦矣。

使民无得擅徙,则诛愚。乱农农民无所于食而必农。愚心、躁欲之民壹意,则农民必静。农静、诛愚,则草必垦矣。

均出余子之使令,以世使之,又高其解舍,令有甬官食,概。不可以辟役,而大官未可必得也,则余子不游事人,则必农。农,则草必垦矣。

国之大臣诸大夫,博闻、辩慧、游居之事,皆无得为,无得居游于百县,则农民无所闻变见方。农民无所闻变见方,则知农无从离其故事,而愚农不知,不好学问。愚农不知,不好学问,则务疾农。知农不离其故事,则草必垦矣。

令军市无有女子。而命其商,令人自给甲兵,使视军兴;又使军市无得私输粮者。则奸谋无所于伏,盗输粮者不私稽,轻游之民不游军市,则农民不淫,国粟不老家劳,则草必垦矣。

百县之治一形,则从迂者不敢更其制,过而废者不敢匿举。过举不匿,则官无邪人。迂者不饰,代者不更,则官属少而民不劳。官无邪,则民不敖;民不敖,则业不败。官属少,征不烦。民不劳,则农多日,农多日,征不烦,业不败,则草必垦矣。

重关市之赋,则农恶商,商有疑惰之心。农恶商,商疑惰,则草必垦矣。

以商之口数使商,令之厮、舆、徒、重者必当名,则农逸而商劳。农逸,则良田不荒;商劳,则去来赍(jī,怀抱着)送之礼无通于百县。则农民不饥,行不饰。农民不饥、行不饰,则公作必疾,而私作不晃,则农事必胜。农事必胜,则草必垦矣。

令送粮无取僦(jiǜ,租赁),无得反庸,车牛舆重必当名。然则往速来疾,则业不败农,业不败农,则草必垦矣。

无得为罪人请于吏而饷食之,则奸民无主。奸民无主,则为奸不勉。为奸不勉,则奸民无朴。奸民无朴则农民不败。农民不败,则草必垦矣。

商君书-更法

孝公平画,公孙鞅、甘龙、杜挚三大夫御于君。虑世事之变,讨正法之本,求使民之道。

君曰:“代立不忘社稷,君之道也;错法务明主长,臣之行也。今吾欲变法以治,更礼以教百姓,恐天下之议我也。”

公孙鞅曰:“臣闻之:‘疑行无成,疑事无功。’君亟定变法之虑,殆无顾天下之议也。且夫有高人之行者;有独知之虑者,必见骜于民。语曰:愚者暗于成事,智者见于未萌。民不可与虑始,而可与乐成。郭偃之法曰:‘论至德者不和于俗,成大功者不谋于众。’法者所以爱民也,礼者所以便事也。是以圣人苟可以强国,不法其故;苟可以利民,不循其礼。”

孝公曰:“善!”

甘龙曰:“不然,臣闻之:‘圣人不易民而教,知者不变法而治。’因民而教者,不劳而功成;据法而治者,吏习而民安。今若变法,不循秦国之故,更礼以教民,臣恐天下之议君,愿熟察之。”

公孙鞅曰:“子之所言,世俗之言也。夫常人安于故习,学者溺于所闻。此两者,所以居官而守法,非所与论于法之外者也。三代不同礼而王,五代不同法而霸。故知者作法,而愚者制焉;贤者更礼,而不肖者拘焉。拘礼之人不足与言事,制法之人不足与论变。君无疑矣。”

杜挚曰:“臣闻之:‘利不百,不变法;功不十,不易器’。臣闻:‘法古不过,循礼无邪。君其图之!’”;

公孙鞅曰:“前世不同教,何古之法?帝王不相复,何礼之循?伏羲、神农,教而不诛;黄帝、尧、舜,诛而不怒;及至文、武,各当时而立法,因事而制礼。礼、法以时而定;制、令顺其宜;兵甲器备,各便其用。臣故曰:治世不一道,便国不必法古。汤、武之王也,不脩古而兴;殷、夏之灭也,不易礼而亡。然则反古者未必可非,循礼者未足多是也。君无疑矣。”

孝公曰:“善!吾闻穷巷多怪,曲学多辨。愚者之笑,智者哀焉;狂夫之乐,贤者丧焉。拘世以议,寡人不之疑矣。”

于是遂出垦草令。