赞
踩
TypeScript 是 Javascrip t超集,支持静态类型检测,可以在编译期提前暴露问题,节省 debug 时间,下面介绍一个基于 TypeScript 开发的网站的框架。
首先,把网站的基本结构搭建起来。新键一个 www 目录,作为网站的根目录。然后新建一个 index.html ,作为网站入口,内容如下:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>基于 TypeScript 的网站开发框架</title> <script src="./js/index.js"></script> </head> <body> </body> </html>
在网页中,使用 <script src="./js/index.js"></script>
引用了一个 js 文件。在 www 目录中新键一个 js 目录,在其中新键 index.js, 内容如下:
window.onload = function () {
console.log("onload");
}
这时候使用浏览器打开 index.html 文件,可以在控制台看到输出 onload ,说明运行成功。
一个网站可能功能很复杂,需要将各个不同的功能,封装到不同的模块中。在 www 同级目录,新建 app 和 framework 目录,app 作为 TypeScript 主要逻辑模块,framework 作为基础功能库模块,可以多个项目共用。添加完成后,目录结构如下:
为了方便测试,在两个项目分别添加一些内容。
在 framework 添加一个日志管理器,提供给其他模块使用,日志管理中有一个开关,控制是否打印日志。
在 framework 目录中添加 src 目录,在 src 目录中添加 LogMgr.ts 文件,代码内容如下:
namespace framework { export class LogMgr { // 日志开关 private static isDebug: boolean = true; public static info(msg: string) { if (this.isDebug) { console.log(msg); } } public static warn(msg: string) { if (this.isDebug) { console.warn(msg); } } public static error(msg: string) { if (this.isDebug) { console.error(msg); } } } }
app 是网站的主要逻辑模块,也是 TypeScript 脚本的入口。测试代码中,引用日志管理器打印日志。
在 app 目录中添加 src 目录,在 src 目录中添加 App.ts 文件,代码内容如下:
namespace app {
import LogMgr = framework.LogMgr;
export class App {
public static main() {
LogMgr.info("app start");
LogMgr.warn("warn msg");
LogMgr.error("error msg");
LogMgr.info("app end");
}
}
App.main();
}
TypeScript 需要编译成 JavaScript 之后才能在网页中使用。TypeScript 的编译配置文件 tsconfig.json,支持集成,可以将多个项目公用的配置,放在基类 tsconfig-base.json 中。
跟 www 目录的同级添加基类配置文件 tsconfig-base.json,内容如下:
{
"compilerOptions": {
"target": "es6",
"module": "system",
"strict": true,
"sourceMap": true,
"removeComments": true,
"declaration": true,
"declarationDir": "./libs/"
}
}
然后分别在 framework 和 app 目录分别添加项目的配置文件,内容如下:
{
"extends": "../tsconfig-base.json",
"compilerOptions": {
"outDir": "../www/js/framework"
},
"include": [
"src"
],
"exclude": [
"node_modules"
]
}
{
"extends": "../tsconfig-base.json",
"compilerOptions": {
"outDir": "../www/js/app"
},
"include": [
"src"
],
"exclude": [
"node_modules"
],
"files": [
"../libs/LogMgr.d.ts"
]
}
配置内容中,有几项需要另外说明,首先是基类配置文件中的
"declaration": true,
"declarationDir": "./libs/"
declaration 为 true 时,编译时会生成声明文件 .d.ts,方便给其他模块使用,否则其他模块引用不到其他模块的内容。declarationDir 配置的是 .d.ts 的存放目录。
在 app 的配置文件中:
"files": [
"../libs/LogMgr.d.ts"
]
就是引用 framework 导出的声明文件。
在 framework 目录和 app 目录执行 tsc 目录,会在 libs 目录下导出声明文件 .d.ts,在 www/js 目录中生成相应的 .js 文件。如下:
在编译之后,js 文件已经生成到 js 目录中了,需要在网站的中引用生成的js文件,修改 index.js 的代码如下:
function loadLib(url) {
var script = document.createElement("script");
script.async = false;
script.src = url;
document.body.appendChild(script);
return script;
}
window.onload = function () {
// 加载 TypeScript 编译生成的 js 文件
loadLib("./js/framework/LogMgr.js");
loadLib("./js/app/app.js");
}
在 index.js 中添加了一个 loadLib 函数,用于加载 TypeScript 编译生成的 js 文件,在 onload 方法中,分别加载两个模块的js。
运行可以看到在 app 项目中,调用日志管理器打印的log。
后续网站开发只需要在对应的 TypeScript 模块中进行。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。