-
Notifications
You must be signed in to change notification settings - Fork 5
环境配置及运行
Short Night 依赖于 TypeScript 和 Webpack,所以,写一个 Short Night 主题时,也要配置好环境才可以。简单来说分为下面几步:
- 初始化项目
- 创建 Webpack 配置文件(仅20行!)
- 运行 Webpack
我打赌你10分钟就可以搞定,让我们开始吧!
首先在一个文件夹下创建 Nodejs 环境:
npm init -y
然后安装一些必须的依赖:
npm install short-night typescript webpack webpack-cli ts-loader style-loader css-loader
最后一步,创建一个 webpack 配置文件(webpack.config.js
)到项目根目录,一个只有20行的 Webpack 配置文件~!
const Webpack = require('webpack');
module.exports = {
entry: './entry.ts',
output: {
path: __dirname,
filename: 'output.js',
},
module: {
rules: [
{ test: /\.ts$/, use: 'ts-loader' },
{ test: /\.css$/, use: ['style-loader', 'css-loader'] },
],
},
resolve: { extensions: ['.js', '.ts'] },
plugins: [
new Webpack.DefinePlugin({ // Short Night 依赖于此插件来读取是否开启 Debug 模式
'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV),
}),
],
};
环境搭建完成!根本不需要什么脚手架工具,徒手即可完成~~
上边webpack.config.js
文件中唯一比较复杂的就是Webpack.DefinePlugin
插件的使用。插件中我们定义了一个process.env.NODE_ENV
变量,他会在 Webpack 编译时,将项目文件中的process.env.NODE_ENV
替换为 Nodejs 中的process.env.NODE_ENV
。听起来有些绕?没关系,你只要知道将环境变量NODE_ENV
赋值成development
意味着开启 Debug 模式,production
意味着关闭 Debug 模式即可。
不过,为了能让 TypeScript 识别上边插件定义的process.env.NODE_ENV
,我们需要在项目根目录下额外增加一个global-types.d.ts
,内容为:
declare const process:any;
在根目录下创建一个index.html
来运行整个项目,内容如下:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
</head>
<body>
<div id="app"></div>
<script src="output.js"></script>
</body>
</html>
关键在于body
中的2行:
-
<div id="app"></div>
:我们定义了一个挂载点,将来要将时间线挂载到那里 -
<script src="output.js"></script>
:我们引用了 Webpack 的编译产出文件,这里的src
对应webpack.config.js
中的output
然后我们为 Webpack 创建入口文件/entry.ts
:
import Timeline from './Timeline'; // 引用上一步中,你自己定义的 Timeline
import '@foxzilla/short-night/styles.css'; // 官方定义的引用 CSS 文件
const timeline = new Timeline( // 将 container 和 canvas 传入构造
Timeline.mount('#app', 'polar-day') // 将 #app 初始化,主题名为 polar-day。该方法返回一个 container 和 一个 canvas
);
timeline.drawInfo.events = [{ // 赋值事件列表,确保事件要大于2个
date: '2019-2-4',
title: 'The theme of Rules start',
},{
date: '2017-10-1',
title: 'Project start',
}];
timeline.apply().then(function () { // 应用 timeline 中的 drawInfo。此方法返回一个 Promise
timeline.draw(); // 当应用完成后,将 timeline 画出
});
你可能会奇怪为什么使用 Timeline 要如此繁琐。实际上,这正是 Short Night 中一个 Component 从创建到绘制的流程:
- 构造时传入
container
、canvas
等信息 - 手动赋值修改
.drawInfo.xxx
- 调用
.apply()
来应用drawInfo
- 等待
.apply()
调用.draw()
完成绘制
接下来到了最激动人心的时刻了!
在 package.json
中增加一个 script
"scripts": {
+ "dev": "webpack --watch --mode=development",
"test": "echo \"Error: no test specified\" && exit 1"
},
然后在命令行中,键入npm run dev
后,等待 Webpack 编译完毕,打开我们上边创建的index.html
到浏览器中。
接下来,若能看到页面无报错且页面显示出了一些文字,即为成功!