FST (full-stack-ts)
在日常的工作编程中,对于前端来讲,我们可能会面对一个个不同的项目,前端不同于其他的编程语言的一个地方就在于,前端的技术纷繁多样,呈现百家争鸣,百家争鸣极大的促进了前端的繁荣,但是却也带来了混乱的管理,层出不穷的框架、思想,令人眼花缭乱,就比如TS的出现极大的提高了前端代码的可控、可管理性。但是,我们几乎每写一个新的项目、新的小功能,可能都需要重新构建一套环境,这个环境是有很多的可选择性的,比如webpack/gulp/rollup,但是,其实不论哪种选择,我们的目标也就是那几样,打包、编译、压缩。这些工作其实都可以抽象出来作为功能模块使用的,而我不需要去关心具体的技术细节,也没必要关心。
目的
fst(full-stack-ts)的存在目的就是为了简化这个流程,通过命令行的方式去添加新的前后端的功能模块,通过可选的命令行选项去选择不同的工作模式。
使用
- 安装
npm install -g fst
- 初始化
fst install
// or
fst i
- 安装依赖
npm install
- 新建项目
fst add modulename // 等同于 fst add modulename -fe
fst add modulename -f // 仅仅生成前端项目
fst add modulename -e // 仅仅生成后端项目
fst a // 等同于fst add
add 命令会在对应的src
目录中的front
和end
目录建立对应的项目,生成基本的文件,fst
的配置文件是fst.config.js
,它会在项目模块初始化的时候生成,你可以手动的指定src
/dest
/front
/end
的值。
每个新建的项目中也都有各自的fst.config.js
/.babelrc
/tsconfig.json
,fst
会自动的将他们和根项目中对应的文件合并。
- 构建项目
fst build modulename // 相当于 fst build modulename -fe
fst build modulename -f // 仅仅编译前端的项目
fst build modulename -e // 仅仅编译后端的项目
fst build modulename -w // 编译并监听项目,对于前端项目会自动编译、刷新,对于后端项目会自动编译
fst b // 等同于fst build
fst b -a // 编译`front目录下的所有的模块`
- 配置
对于编译,我们总是会有很多的自定义行为,这里我们主要就是对自定义行为来进行自定义,在说明之前,首先得介绍一下目录结构:
- 根目录
根目录下包含有以下的文件及目录
- package.json
npm package.json
文件,记录相关的依赖等 - fst.config.js
fst
的配置文件,它有对整个项目以及单个独立子项目的配置 - tsconfig.json
typescript
的配置文件 - .babelrc
babel
的配置文件 - src 整体项目的源代码文件
- dest 整体项目的打包后的地方
这些文件可以说是定义了一个大的方向,除了src
,dest
目录外,其余的文件本质上其实都是json
对象,因此,fst
为了提高项目的可配置性,在每个单独的项目里也都会使用以下的文件进行配置:
- fst.config.js
- tsconfig.json
- .babelrc
使用的时候会和根目录下的配置进行合并(以小目录为准)。
fst.config.js
根目录下的fst.config.js
例子
module.exports = {
"src": "src",
"dest": "dest",
"front": "front",
"end": "end",
"programs": {
"test": {
"front": {
"tsconfig": {},
"extractCss": true,
"entry": [],
"plugins": [],
"uglify": {
"enable": true,
"option": {}
},
"html": {},
"variable": {
"flags": {},
"constant": {}
}
},
"end": {}
}
},
"relativeFiles": [
"/Users/qianzhixiang/union/fst/fst.config.js",
"/Users/qianzhixiang/union/fst/package.json",
"/Users/qianzhixiang/union/fst/tsconfig.json",
"/Users/qianzhixiang/union/fst/.babelrc"
],
"relativeDirectorys": [
"/Users/qianzhixiang/union/fst/src/front",
"/Users/qianzhixiang/union/fst/src/end",
"/Users/qianzhixiang/union/fst/dest/front",
"/Users/qianzhixiang/union/fst/dest/end",
"/Users/qianzhixiang/union/fst/dest",
"/Users/qianzhixiang/union/fst/src"
]
}
子项目中的fst.config.js
module.exports = {
tsconfig: {
},
entry: [
{
src: "something",
name: "something"
}
],
useBabel: boolean;
server: {
enable: boolean,
config: {
port: number,
host: string,
}
}
node: {
},
uglify: {
enable: boolean;
compress: {
}
},
extractCss: {
enable: boolean,
},
copy: [
{
from: string,
to: string
}
],
html: {
template: string;
},
script: {
defaultAttribute: 'defer'
},
variable: {
},
extend: function(config){
}
}