# 基础建设-项目构建
# webpack
- webpack
# gulp
- gulp
# rollup
# plop
What Is Plop – File Generator Tool System (opens new window)
plop是一个小工具,它可以节省您的时间,并帮助您的团队构建具有一致性的新文件。
使用Handlebars.js
作为模板
基于Inquirer.js
构建
npm i -g plop
npm i --save-dev plop
1
2
3
2
3
配置文件为plopfile.ts
或者 plopfile.js
module.exports = function (plop) {
plop.setGenerator('controller', {
description: 'application controller',
// inquirer prompts
prompts: [{
type: 'input',
name: 'name',
message: 'Controller name?'
}],
// actions to perform
actions: [{
type: 'add',
path: 'src/controllers/{{dashCase name}}.js',
templateFile: 'templates/controller.hbs',
}]
});
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
在package.json中添加
// package.json
{
...,
"scripts": {
"plop": "plop"
},
...
}
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
# lerna与monorepo
# 1.monorepo
因为lerna,monorep这个开发策略变得火热。在版本管理中,monorepo 就是把所有的相关项目都放在一个仓库中,这种单个存储库的方式有优势也有劣势:
- 易于复用代码:公用的逻辑可以放在packages之外,共用
- 多项目依赖关系简化
- 代码提交的原子性
# 2.monorepo开发策略在前端中使用(lerna)
在开发前端项目中组件库组件库是常见的,如果我们使用的是multirepo开发策略每个组件都是一个git项目,组件库主项目也是一个git项目,一些工具库也是git项目。现在跨越了多个代码仓库的,这样如果组件库的主项目要使用的新开发的组件,就必须要组件发版,组件更改变得的麻烦。这时就可以使用monorepo,在一个git项目中建立多个package。但在使用开发中,多个package的node_moudle的包版本管理又是件很头疼的事情。 lerna就是针对以上问题,在使用 git 和 npm 管理多软件包代码仓库的工作流程进行优化的工具。
# 基础建设-常用的工具
# 判断滑动手势
const GESTURE_SIGNAL = {
NONE: 0,
UP: 1,
DOWN: 2,
LEFT: 3,
RIGHT: 4,
}
const getSlideAngle = (dx: number, dy: number) => {
return (Math.atan2(dy, dx) * 180) / Math.PI
}
const getSlideDirection = (
startX: number,
startY: number,
endX: number,
endY: number,
) => {
const dy = startY - endY
const dx = endX - startX
let result = GESTURE_SIGNAL.NONE
if (Math.abs(dx) < 2 && Math.abs(dy) < 2) {
return result
}
const angle = GetSlideAngle(dx, dy)
if (angle >= -45 && angle < 45) {
result = GESTURE_SIGNAL.RIGHT
} else if (angle >= 45 && angle < 135) {
result = GESTURE_SIGNAL.UP
} else if (angle >= -135 && angle < -45) {
result = GESTURE_SIGNAL.DOWN
} else if (
(angle >= 135 && angle <= 180) ||
(angle >= -180 && angle < -135)
) {
result = GESTURE_SIGNAL.LEFT
}
return result
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40