TypeScript实战-02-环境搭建HelloWorld

一,前言

上一篇对TS做了简单介绍,
在对TS功能进行演示前,首先需要搭建一个TS基础项目,并实现简单的自动打包构建

1,创建项目
2,使用webpack实现多环境构建
3,配置入口和启动命令
4,启动服务和打包构建演示

环境: nodeJs
IDE: VSCode

二,创建项目

1,新建ts_in_action文件夹,并执行npm命令,生成package.json:

npm init -y
BravedeMacBook-Pro:ts-in-action brave$ npm init -y
Wrote to /Users/brave/Desktop/TypeScript实战/ts-in-action/package.json:

{
  "name": "ts-in-action",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC"
}

2,有了package.json后,全局安装ts依赖,可在任何位置使用tsc命令

npm i typescript -g
BravedeMacBook-Pro:ts-in-action brave$ sudo npm i typescript -g
Password:
/usr/local/bin/tsserver -> /usr/local/lib/node_modules/typescript/bin/tsserver
/usr/local/bin/tsc -> /usr/local/lib/node_modules/typescript/bin/tsc
+ typescript@3.6.2
added 1 package from 1 contributor in 4.012s

3,创建typescript配置文件tsconfig.json

tsc --init
BravedeMacBook-Pro:ts-in-action brave$ tsc --init
message TS6071: Successfully created a tsconfig.json file.

4,创建ts文件

新建src/index.ts

let hello : string = 'Hello TypeScript'

5,编译ts文件

执行编译命令:

tsc ./src/index.ts

生成src/index.js

var hello = 'Hello TypeScript';

6,比较编译前后的区别

将let关键字替换成了var,并去掉了ts的: string 类型注解

也可以使用上篇提到的,官网的playGround来查看编译后的js文件

http://www.typescriptlang.org/play/

playground

三,使用webpack实现多环境构建

安装webpack, webpack-cli, webpack-dev-server:

npm i webpack webpack-cli webpack-dev-server -D

新建build目录(与src目录同级),存放多环境配置文件:

为了工程的可维护性,将开发环境,生产环境,公共配置,分开书写,最后通过插件进行合并
build/webpack.base.config.js: 公共环境配置
build/webpack.config.js: 所有配置文件的入口
build/webpack.dev.config.js: 开发环境配置
build/webpack.pro.config.js: 生产环境配置
公共环境 : build/webpack.base.config.js:
const HtmlWebpackPlugin = require('html-webpack-plugin')

module.exports = {
    entry: {
        'app': './src/index.ts'
    },
    output: {
        filename: 'app.js'
    },
    resolve: {
        extensions: ['.js', '.ts', '.tsx']
    },
    module: {
        rules: [
            {
                test: /\.tsx?$/,
                use: [{
                    loader: 'ts-loader'
                }],
                exclude: /node_modules/
            }
        ]
    },
    plugins: [
        new HtmlWebpackPlugin({
            template: './src/tpl/index.html'
        })
    ]
}

本地安装 ts-loader 和 typescript:

npm i ts-loader typescript -D

本地安装 htmlWebpackPlugin

npm i html-webpack-plugin -D

功能:通过模板自动生成网站首页,将输出文件嵌入到文件中

创建src/tpl/index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>TypeScript</title>
</head>
<body>
    <div class="app"></div>
</body>
</html>
开发环境 : build/webpack.dev.config.js
module.exports = {
	devtool: 'cheap-module-eval-source-map'
}

开发环境下的sourcemap官方推荐配置:

cheap:
	sourcemap会忽略文件的列信息,因为在调试时,列信息是没有用的
module:
	会定位到ts源码,而不是经过loader转译后的js源码
evel-source-map
	会将sourcemap以dataUrl形式打包到文件中,重编译速度非常快
生产环境配置 build/webpack.pro.config.js:
const { CleanWebpackPlugin } = require('clean-webpack-plugin')

module.exports = {
    plugins: [
        new CleanWebpackPlugin()
    ]
}

安装cleanwebpackplugin插件:

npm i clean-webpack-plugin

功能:每次成功构建后,清空dist目录

配置文件入口 build/webpack.config.js:
const merge = require('webpack-merge')
const baseConfig = require('./webpack.base.config')
const devConfig = require('./webpack.dev.config')
const proConfig = require('./webpack.pro.config')

module.exports = (env, argv) => {
    let config = argv.mode === 'development' ? devConfig : proConfig;
    return merge(baseConfig, config);
};

安装webpack-merge插件

npm i webpack-merge -D

功能:将两个配置文件进行合并

逻辑:

webpack.config.js中引入前面的3个配置文件
通过判断当前环境变量,选择对应的配置文件,再将baseConfig和config合并

四,配置入口和启动命令

修改package.json入口为src/index.ts:

{
	...
	"main": "./src/index.ts",
	...
}
开发环境启动命令
npm start

package.json中script选项,添加start命令配置:

{
  ...
  "scripts": {
    "start":"webpack-dev-server --mode=development --config ./build/webpack.config.js"
  }
  ...
}
使用webpack-dev-server启动服务
--mode指定模式,设置当前环境变量为development
--config指定配置文件为buildwebpack.config.js

将src/index.ts中声明的字符串,挂载到tpl/index.html的class=app的div上

src/index.ts:

let hello : string = 'Hello TypeScript'
document.querySelectorAll('.app')[0].innerHTML = hello;

测试开发环境启动命令:

执行npm start

ts_start

生产环境启动命令
npm run build

package.json中script选项,添加build命令配置:

{
	...
	"scripts": {
	    "start": "webpack-dev-server --mode=development --config ./build/webpack.config.js",
	    "build": "webpack --mode=production --config ./build/webpack.config.js",
	  },
	  ...
}

执行npm run build,根目录生成dist文件夹,包含打包后全部文件
构建好的app.js会自动嵌入到模板文件index.html中
build_result
package.json:

{
  "name": "ts-in-action",
  "version": "1.0.0",
  "description": "",
  "main": "./src/index.ts",
  "scripts": {
    "start": "webpack-dev-server --mode=development --config ./build/webpack.config.js",
    "build": "webpack --mode=production --config ./build/webpack.config.js",
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "html-webpack-plugin": "^3.2.0",
    "ts-loader": "^6.0.4",
    "typescript": "^3.6.2",
    "webpack": "^4.39.3",
    "webpack-cli": "^3.3.8",
    "webpack-dev-server": "^3.8.0",
    "webpack-merge": "^4.2.2"
  },
  "dependencies": {
    "clean-webpack-plugin": "^3.0.0"
  }
}

五,结尾

本篇搭建了一个ts的基础项目
后续的功能将以这个项目为基础进行演示
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BraveWangDev

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值