tsc xxx.ts
将TS代码编译转换为JS才能正确执行。这样每次修改每次都进行手动编译不是很方便,可以使用tsc xxx.ts -w
来监听文件是否有变化,一旦检测文件发生变化,就会实时的将TS转换成JS。tsconfig.json
文件来配置TS的编译信息tsc --init
来创建该文件信息tsconfig.json
之后,通过tsc
就能编译项目下所有的TS文件,通过tsc -w
就能监视所有的TS文件并编译tsconfig.json
之后,虽然可以“一键”编译,但是有时我们只希望编译其中一部分的ts代码,这时,就需要我们对tsconfig.json
文件进行一定的配置,以满足我们对编译项目的要求include:
指定需要编译的文件或目录,*表示任意文件,**表示任意目录
exclude:
指定不需要编译的文件或目录extents:
可以复用之前已有的json文件,减少重复配置file:
用于指定单个的文件,范围较小不常用{
/*
tsconfig.json是ts编译器的配置文件,ts编译器可以根据它的信息来对代码进行编译
*/
//inclode用来指定哪些ts文件需要被编译 可*表示任意文件 可**表示任意目录
"include": [
"./src/**/*" //表示当前的src目录下的任意目录的任意文件都被编译
],
//配置不希望被编译的文件,一般不用进行配置
//有默认值:["node_modules", "bower_components", "jspm_packages"]
"exclude": [
"./src/test_file/**/*"
],
//定义需要继承的配置文件,避免重复配置
//"extends": "",
//直接指定需要编译的文件,不常用,项目比较小的时候适用
"files": [
"./src/test_file/test_case.ts"
]
}
"compilerOptions": {
// 用来指定TS文件编译时的ES版本,默认为ES3
// 可取值:es3', 'es5', 'es6', 'es2015', 'es2016', 'es2017', 'es2018', 'es2019', 'es2020', 'es2021', 'es2022', 'esnext
"target": "ES5",
// 指定需要使用的模块化的规范
// 可取值:'none', 'commonjs', 'amd', 'system', 'umd', 'es6', 'es2015', 'es2020', 'es2022', 'esnext', 'node16', 'nodenext'
"module": "System",
// 用来指定项目中需要使用到的库文件, 随便赋值后可以查看具体值,一般情况下不需要动
//"lib": []
// 用于指定编译结束后的文件输出的位置
"outDir": "./dist",
// 用来将不同代码合并为一个文件,将编译输出的js文件合成一个文件
// 这个选项是对module文件有一定要求的
"outFile": "./dist/outJS.js",
// 是否对js文件进行编译,默认false
"allowJs": false,
// 是否检查js代码是否符合语法规范
"checkJs": false,
// 是否移除注释,默认false
"removeComments": false,
// 不生成编译后的文件,默认false
"noEmit": false,
// 当有错误时不生成编译后的文件
"noEmitOnError": false,
// 用来设置编译后的文件是否使用严格模式
"alwaysStrict": false,
// 是否禁止隐式的any类型
"noImplicitAny": false,
// 不允许类型不明确的this
"noImplicitThis": false,
// 严格的检查null的值,让编译器检测出有可能是null的值
"strictNullChecks": false,
// 所有严格检查的总开关,打开的话所有的严格检查都会打开
"strict": false
}
npm init -y
命令,在新项目的根目录下新建package.json文件npm i -D webpack webpack-cli typescript ts-loader
导入依赖工具包// 导入一个包
const path = require('path');
// webpack 中的所有的配置信息都应该写在module.export中
module.exports = {
// 指定入口文件
entry: "./src/index.ts",
// 指定打包文件所在的目录
output: {
// 指定打包文件的目录
path: path.resolve(__dirname, 'dist'),
// 打包后文件的名字
filename: "bundle.js"
},
// 指定webpack打包时要使用的模块
module: {
// 指定要加载的规则
rules:[
{
// test指定的是规则生效的文件
test: /\.ts$/,
// 要使用的loader
use: 'ts-loader',
// 要排除的文件
exclude: /node-modules/
}
]
}
};
{
"compilerOptions": {
"module": "ES2015",
"target": "ES2015",
"strict": true
}
}
"build":"webpack"
{
"name": "webpack",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"build": "webpack" // 除了这个都是之前自动生成的
},
"keywords": [],
"author": "",
"license": "ISC",
"devDependencies": {
"ts-loader": "^9.4.2",
"typescript": "^4.9.4",
"webpack": "^5.75.0",
"webpack-cli": "^5.0.1"
}
}
npm run build
命令将项目进行打包了npm i -D html-webpack-plugin
命令可以引入插件,它可以帮助我们生成html文件...
// 引入html插件
const HTMLPlugin = require("html-webpack-plugin");
...
// webpack 中的所有的配置信息都应该写在module.export中
module.exports = {
// 配置Webpack的插件
plugins: [
new HTMLPlugin({
title: "MyWebPack", // 设定html网页的标题
template: "./src/index.html", // 设定生成的html网页的模板
}),
]
};
npm i -D webpack-dev-server
引入本地服务器,根据项目的改变自动的刷新{
...
"scripts": {
...
"start": "webpack serve --open edge.exe"
},
...
}
这时通过```npm start命令就可以实时的打开网页并修改我们的代码了
npm i -D clean-webpack-plugin
命令引入该插件,可以帮助我们及时的清理生成的目录当中的旧文件,保持文件最新...
// 引入clean插件
const CleanPlugin = require("clean-webpack-plugin");
...
// 配置Webpack的插件
plugins: [
...
new CleanPlugin(),
]
};
module.exports = {
...
// 用来设置引用的模块的
resolve: {
extensions: ['.ts', '.js']
}
};
// 文件1: data.ts文件
export const myName = 'iFinder'
//文件2: index.ts文件
import { myName } from "./data"
// 这个时候没有webpack.config.json中的配置就会报错
console.log(myName)
npm i -D @babel/core @babel/preset-env babel-loader core-js
来引入相应的模块...
module.exports = {
...
module: {
// 指定要加载的规则
rules:[
{
...
use: [
{ //配置babel
loader: "babel-loader",
options: {
// 设置预定义的环境
presets:[
[
// 指定环境插件
"@babel/preset-env",
{ // 配置信息
// 要兼容的目标浏览器
targets:{
"chrome":"88"
},
// 指定corejs的版本
"corejs":"3",
// 使用corejs的方式 "usage" 表示按需加载
"useBuiltIns":"usage"
}
]
]
}
},
'ts-loader'
],
// 要排除的文件
exclude: /node-modules/
}
]
},
...
};
...
// webpack 中的所有的配置信息都应该写在module.export中
module.exports = {
...
// 指定打包文件所在的目录
output: {
...
environment: {
// 禁用箭头表达式
arrowFunction: false
}
},
...
};
笔记markdown文件+项目源码
B站对应视频