webpack配置typescript详解

随着现在typescript使用越来越多,作为打包工具界的webpack怎么编译typescript呢?

下面我把自己的实践记录一下,成功编译了typescript文件,并且引入typescript模块后,也可以成功编译。

我们从新建webpack项目开始,在此之前先贴一下环境,经常环境不同会造成不同的状况,这边先贴上的环境:

1$ node -v 2v14.15.4 3 4$ npm -v 56.14.10 6 7$ webpack -v 8webpack: 5.58.2 9webpack-cli: 4.9.0 10webpack-dev-server 4.3.1

打包typescript文件

**1)**新建项目

$ npm init -y

**2)**安装webpack和webpack-cli

webpack是其中的核心,webpack-cli是命令行工具。

$ npm i -D webpack webpack-cli

**3)**安装typescript和ts-loader

typescript就是语言编译器,这个就不用多解释了。

ts-loader就是webpack在打包typescript文件的时候用来解析用的,这个就是其中结合的关键了。webpack其实就是通过各种loader打包不同的文件。

$ npm i -D typescript ts-loader

其中:

1i 表示install,安装的意思。 2-D 表示增加到package.json中devDependencies。

这步完成后,我的package.json文件如下:

1{ 2 "name": "04_test", 3 "version": "1.0.0", 4 "description": "", 5 "main": "index.js", 6 "scripts": { 7 "test": "echo \"Error: no test specified\" && exit 1" 8 }, 9 "keywords": [], 10 "author": "", 11 "license": "ISC", 12 "devDependencies": { 13 "ts-loader": "^9.2.6", 14 "typescript": "^4.4.4", 15 "webpack": "^5.58.2", 16 "webpack-cli": "^4.9.0" 17 } 18} 19

**4)**新建webpack.config.js

webpack.config.js这个就是webpack编译时的配置文件,关键是要配置ts-loader,参考如下代码:

1// 引入路径模块 2const path = require("path"); 3 4module.exports = { 5 // 从哪里开始编译 6 entry: "./src/index.ts", 7 // 编译到哪里 8 output: { 9 path: path.resolve(__dirname, 'dist'), 10 filename: "bundle.js" 11 }, 12 // 配置模块规则 13 module: { 14 rules: [ 15 { 16 test: /\.tsx?$/, // .ts或者tsx后缀的文件,就是typescript文件 17 use: "ts-loader", // 就是上面安装的ts-loader 18 exclude: "/node-modules/" // 排除node-modules目录 19 } 20 ] 21 }, 22 // 模式 23 mode: "development", 24}

关键是:module.exports.module的配置,配置ts-loader。

一个坑:

在配置过程中,我习惯性的给 test 的值增加双引号,结果一直导致 webpack 报loader的错误,如下图所示:

1

**5)**新建入口文件./src/index.ts

上面webpack配置的入口文件是:./src/index.ts,我们新建一个。

代码如下:

1let i: number = 10; 2console.log(10);

其中:i的声明用了typescript强类型的语法。

现在差最后一步,增加typescript的配置。

**6)**新建tsconfig.json

tsconfig.json就是typescript的配置文件:

1{ 2 "compilerOptions": { 3 "module": "ES2015", 4 "target": "ES2015", 5 "strict": true 6 } 7}

其中:strict设置为严格模式。

**7)**进行打包

上面配置完成后,就可以打包了:

$ webpack

如果按照上面的操作步骤一下,正常是没有什么问题,打包成功后就会生成:dist/bundle.js 文件了。

这样typescript文件就可以正常打包了。

打包typescript模块

一般开发的项目都比较大,需要引入其他模块,下面试验一下打包模块。

**1)**新建:./src/common.ts 模块,代码如下:

1const a: number = 1; 2export { a };

**2)**修改 ./src/index.ts,增加引入common模块的代码:

1import {a} from "./common"; 2console.log(a);

此时如果直接打包,那么会报如下错误:

1ERROR in ./src/index.ts 1:0-29 2Module not found: Error: Can't resolve './common' in 'xxx'

webpack.config.js 需要增加 resolve 配置,来加 typescript 的模块。

**3)**webpack.config.js 增加 resolve 配置:

1module.exports = { 2 // 前面还有一堆... 3 4 resolve: { 5 extensions: [".ts"], // 配置ts文件可以作为模块加载 6 } 7}

至此再次打包就可以成功了。

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )