当前位置: 首页 > news >正文

Webpack的ts的配置详细教程

文章目录

  • 前言
  • ts是什么?
  • 基础配置
  • Loader
  • Source Maps
  • Client types
    • 使用第三方类库
    • 导入其他资源
  • 后言

前言

hello world欢迎来到前端的新世界


😜当前文章系列专栏:webpack
🐱‍👓博主在前端领域还有很多知识和技术需要掌握,正在不断努力填补技术短板。(如果出现错误,感谢大家指出)🌹
💖感谢大家支持!您的观看就是作者创作的动力

ts是什么?

TypeScript 是 JavaScript 的超集,为其增加了类型系统,可以编译为普通 JavaScript 代码。这篇指南里我们将会学习是如何将 webpack 和TypeScript 进行集成。

感兴趣的可以去看
ts的介绍以及ts和js的区别

基础配置

首先,执行以下命令安装 TypeScript compiler 和 loader:

npm install --save-dev typescript ts-loader

现在,我们将修改目录结构和配置文件:

project

  webpack-demo|- package.json|- package-lock.json
+ |- tsconfig.json|- webpack.config.js|- /dist|- bundle.js|- index.html|- /src|- index.js
+   |- index.ts|- /node_modules

tsconfig.json

这里我们设置一个基本的配置来支持 JSX,并将 TypeScript 编译到 ES5……

{"compilerOptions": {"outDir": "./dist/","noImplicitAny": true,"module": "es6","target": "es5","jsx": "react","allowJs": true,"moduleResolution": "node"}
}

现在,配置 webpack 处理 TypeScript:

webpack.config.js

const path = require('path');module.exports = {entry: './src/index.ts',module: {rules: [{test: /\.tsx?$/,use: 'ts-loader',exclude: /node_modules/,},],},resolve: {extensions: ['.tsx', '.ts', '.js'],},output: {filename: 'bundle.js',path: path.resolve(__dirname, 'dist'),},
};

这会让 webpack 直接从./index.ts进入,然后通过 ts-loader 加载所有的 .ts .tsx 文件,并且在当前目录输出一个 bundle.js 文件。

现在让我们改变lodash./index.ts 文件中的引入, 因为在 lodash 的定义中没有默认(default)的导出。

./index.ts

- import _ from 'lodash';
+ import * as _ from 'lodash';function component() {const element = document.createElement('div');element.innerHTML = _.join(['Hello', 'webpack'], ' ');return element;}document.body.appendChild(component());

Tip
如果想在 TypeScript 中保留如import _ from ‘lodash’;的语法被让它作为一种默认的导入方式,需要在文件 tsconfig.json 中设置 “allowSyntheticDefaultImports” : true 和 “esModuleInterop” : true 。这个是与 TypeScript 相关的配置,在本文档中提及仅供参考。

Loader

在本指南中,我们使用 ts-loader,因为它能够很方便地启用额外的 webpack 功能,例如将其他 web 资源导入到项目中。

Warning
​ ts-loader​ 使用 TypeScript 编译器 tsc ,并依赖于您的 ​tsconfig.json​ 配置文件。请确保避免将"module"设置为"CommonJS",否则Webpack将无法进行代码摇树优化(tree-shaking

请注意,如果您已经在使用​ babel-loader​ 来转译您的代码,您可以使用​ @babel/preset-typescript​ 来让Babel处理您的JavaScriptTypeScript文件,而无需使用额外的加载器。请记住,与ts-loader相反,底层的 @babel/plugin-transform-typescript​ 插件不会执行任何类型检查。

Source Maps

想要启用 source map,我们必须配置 TypeScript,以将内联的 source map 输出到编译后的 JavaScript 文件中。必须在 TypeScript 配置中添加下面这行:

  {"compilerOptions": {"outDir": "./dist/",
+     "sourceMap": true,"noImplicitAny": true,"module": "commonjs","target": "es5","jsx": "react","allowJs": true,"moduleResolution": "node",}}

现在,我们需要告诉 webpack 提取这些 source map,并内联到最终的 bundle 中。

webpack.config.js

  const path = require('path');module.exports = {entry: './src/index.ts',
+   devtool: 'inline-source-map',module: {rules: [{test: /\.tsx?$/,use: 'ts-loader',exclude: /node_modules/,},],},resolve: {extensions: [ '.tsx', '.ts', '.js' ],},output: {filename: 'bundle.js',path: path.resolve(__dirname, 'dist'),},};

Client types

你可以在 TypeScript 代码中使用 webpack 特定的特性,比如 import.meta.webpack。并且 webpack 也会为它们提供类型支持,只需要添加一个 TypeScript reference 声明:

/// <reference types="webpack/module" />
console.log(import.meta.webpack); // 没有上面的声明的话,TypeScript 会抛出一个错误

使用第三方类库

在从 npm 安装 third party library(第三方库) 时,一定要记得同时安装此 library 的类型声明文件(typing definition)。你可以从 TypeSearch 中找到并安装这些第三方库的类型声明文件。

举个例子,如果想安装 lodash 类型声明文件,我们可以运行下面的命令:

npm install --save-dev @types/lodash

导入其他资源

想要在 TypeScript 中使用非代码资源(non-code asset),我们需要告诉 TypeScript 推断导入资源的类型。在项目里创建一个 ​custom.d.ts​ 文件,这个文件用来表示项目中 TypeScript 的自定义类型声明。我们为 .svg 文件设置一个声明:
custom.d.ts

declare module '*.svg' {const content: any;export default content;
}

H 这里,我们通过指定任何以 .svg 结尾的导入(import),将 SVG 声明(declare) 为一个新的模块(module),并将模块的 content 定义为 any。我们可以通过将类型定义为字符串,来更加显式地将它声明为一个 url。同样的概念适用于其他资源,包括 CSS, SCSS, JSON 等。

后言

创作不易,要是本文章对广大读者有那么一点点帮助 不妨三连支持一下,您的鼓励就是博主创作的动力

相关文章:

Webpack的ts的配置详细教程

文章目录 前言ts是什么&#xff1f;基础配置LoaderSource MapsClient types使用第三方类库导入其他资源 后言 前言 hello world欢迎来到前端的新世界 &#x1f61c;当前文章系列专栏&#xff1a;webpack &#x1f431;‍&#x1f453;博主在前端领域还有很多知识和技术需要掌握…...

传智杯第五届题解

B.莲子的机械动力学 分析&#xff1a;这题有个小坑&#xff0c;如果是00 0&#xff0c;结果记得要输出0。 得到的教训是&#xff0c;避免前导0出现时&#xff0c;要注意答案为0的情况。否则有可能会没有输出 #include<assert.h> #include<cstdio> #include<…...

Android 通过demo调试节点权限问题

Android 通过demo调试节点权限问题 近来收到客户反馈提到在应用层无法控制节点&#xff0c;于是写了一个简单的demo来验证节点的IO权限&#xff0c;具体调试步骤就是写一个按钮点击事件&#xff0c;当点击按钮时将需要验证的节点写为1&#xff08;节点默认为1则写为0&#xff…...

邮政快递物流查询,将指定某天签收的单号筛选出来

批量查询邮政快递单号的物流信息&#xff0c;将指定某天签收的单号筛选出来。 所需工具&#xff1a; 一个【快递批量查询高手】软件 邮政快递单号若干 操作步骤&#xff1a; 步骤1&#xff1a;运行【快递批量查询高手】软件&#xff0c;并登录 步骤2&#xff1a;点击主界面左…...

Java 8 lambda的一个编译bug

最近利用github action向Maven中央仓库发布企业微信SDK时会失败&#xff0c;从日志中发现是系统资源耗尽了&#xff0c;日志如下&#xff1a; [INFO] Changes detected - recompiling the module! :dependency [INFO] Compiling 35 source files with javac [debug target 8] …...

无人机覆盖路径规划综述

摘要&#xff1a;覆盖路径规划包括找到覆盖某个目标区域的每个点的路线。近年来&#xff0c;无人机已被应用于涉及地形覆盖的多个应用领域&#xff0c;如监视、智能农业、摄影测量、灾害管理、民事安全和野火跟踪等。本文旨在探索和分析文献中与覆盖路径规划问题中使用的不同方…...

【代码随想录】算法训练计划37

贪心 1、738. 单调递增的数字 题目&#xff1a; 输入: n 10 输出: 9 思路&#xff1a; func monotoneIncreasingDigits(n int) int {// 贪心&#xff0c;利用字符数组s : strconv.Itoa(n)ss : []byte(s)leng : len(ss)if leng < 1 {return n}for i:leng-1; i>0; i-- …...

网络基础_1

目录 网络基础 协议 协议分层 OSI七层模型 网络传输的基本流程 数据包的封装和分用 IP地址和MAC地址 网络基础 网络就是不同的计算机之间可以进行通信&#xff0c;前面我们学了同一台计算机之间通信&#xff0c;其中有进程间通信&#xff0c;前面学过的有管道&#xff…...

机器学习:DBSCAN算法(效果比K-means好)

基本概念 核心对象&#xff1a;以点为圆心半径为r的圆&#xff0c;如果圈里面的样本点大于给定的阈值(minPts)&#xff0c;那么这个点就叫做核心点 直接密度可达&#xff1a;点p在q为圆心的圆内 密度可达&#xff1a; p1与p2直接密度可达&#xff0c;p2与p3直接密度可达&…...

在Spring Boot中隔离@Async异步任务的线程池

在异步任务执行的时候&#xff0c;我们知道其背后都有一个线程池来执行任务&#xff0c;但是为了控制异步任务的并发不影响到应用的正常运作&#xff0c;我们需要对线程池做好相关的配置&#xff0c;以防资源过度使用。这个时候我们就考虑将线程池进行隔离了。 那么我们为啥要…...

FFmpeg架构全面分析

一、简介 它的官网为&#xff1a;https://ffmpeg.org/&#xff0c;由Fabrice Bellard&#xff08;法国著名程序员Born in 1972&#xff09;于2000年发起创建的开源项目。该人是个牛人&#xff0c;在很多领域都有很大的贡献。 FFmpeg是多媒体领域的万能工具。只要涉及音视频领…...

OAuth(开放授权)介绍

OAuth&#xff08;开放授权&#xff09;是一个开放标准&#xff0c;允许用户授权第三方应用访问他们存储在另一服务提供商上的信息&#xff0c;而无需将用户名和密码直接暴露给第三方应用。这个过程提供了一种安全的授权方式&#xff0c;常用于允许用户让第三方应用访问例如邮箱…...

Online ddl和replace ddl

在这个之前我们先来了解两种文件类型 1. .ibd文件 表数据文件&#xff0c;存储了表的数据和索引信息&#xff0c;从Mysql8开始表定义信息&#xff0c;从.frm文件改为.dcl文件存储&#xff0c;而表数据和索引信息仍然储存在.ibd文件&#xff0c;.idb文件通常在书籍库目录下。 …...

WEB渗透—反序列化(九)

Web渗透—反序列化 课程学习分享&#xff08;课程非本人制作&#xff0c;仅提供学习分享&#xff09; 靶场下载地址&#xff1a;GitHub - mcc0624/php_ser_Class: php反序列化靶场课程&#xff0c;基于课程制作的靶场 课程地址&#xff1a;PHP反序列化漏洞学习_哔哩哔_…...

蓝桥杯day02——第三大的数

题目 给你一个非空数组&#xff0c;返回此数组中 第三大的数 。如果不存在&#xff0c;则返回数组中最大的数。 示例 1&#xff1a; 输入&#xff1a;[3, 2, 1] 输出&#xff1a;1 解释&#xff1a;第三大的数是 1 。 示例 2&#xff1a; 输入&#xff1a;[1, 2] 输出&…...

linux shell中set -e命令的作用

set -e 是一个在shell脚本中常用的命令&#xff0c;它的含义是在脚本执行过程中&#xff0c;如果出现任何一个命令的执行结果不是零&#xff08;即命令执行失败&#xff09;&#xff0c;则立即退出整个脚本。 set -e 的用途是在脚本中进行错误处理和控制流程。通过设置set -e&…...

linux shell 字符替换命令

sed 文本 2.txt 内容如下&#xff1a; 1 2 3 4 511 121abcabcc1.替换文本指定字符或字符串&#xff0c;不更改原文件 将文本内容替换并输出&#xff0c;但不直接在原文档中修改: sed "s/旧字符串/新字符串/g" 文档 范例,将文本中的 1 替换为 b rootheihei:/# sed &…...

Vue3生命周期函数(简述题)

1.图示 2.说明 3.补充 1.在vue3组合式API中&#xff0c;我们需要将生命周期函数先导入&#xff0c;然后才能使用。 import {onMounted} from vue2.beforeCreate和created被setup()方法所代替...

11月29日,每日信息差//雷军个人向武汉大学捐赠13亿元现金//看电视默认设置新规一览:开机广告不超 5 秒、不设置一键付费

&#x1f396; 继长安汽车后&#xff0c;蔚来将与吉利控股达成换电业务合作 &#x1f384; 中国飞鹤入选工信部质量提升典型案例 &#x1f386; 雷军个人向武汉大学捐赠13亿元现金 &#x1f387; 奢侈品电商Farfetch或将私有化 &#x1f381; 亚马逊云科技宣布推出Amazon Q ✨ …...

融资经理简历模板

这份简历内容&#xff0c;以综合柜员招聘需求为背景&#xff0c;我们制作了1份全面、专业且具有参考价值的简历案例&#xff0c;大家可以灵活借鉴。 融资经理简历在线编辑下载&#xff1a;百度幻主简历 求职意向 求职类型&#xff1a;全职 意向岗位&#xff1a;融资经理 …...

Axure RP中文语言包终极配置指南:5分钟实现界面完全本地化

Axure RP中文语言包终极配置指南&#xff1a;5分钟实现界面完全本地化 【免费下载链接】axure-cn Chinese language file for Axure RP. Axure RP 简体中文语言包。支持 Axure 11、10、9。不定期更新。 项目地址: https://gitcode.com/gh_mirrors/ax/axure-cn 还在为Axu…...

中兴光猫工厂模式解锁终极指南:3分钟掌握隐藏功能

中兴光猫工厂模式解锁终极指南&#xff1a;3分钟掌握隐藏功能 【免费下载链接】zteOnu A tool that can open ZTE onu device factory mode 项目地址: https://gitcode.com/gh_mirrors/zt/zteOnu 还在为光猫功能受限而烦恼吗&#xff1f;zteOnu是一款专为中兴光猫设备设…...

Linux系统服务“窃听”与“喊话”:dbus-monitor/dbus-send实战指南(以systemd-logind为例)

Linux系统服务的“窃听”与“喊话”&#xff1a;dbus-monitor/dbus-send高阶实战指南当你坐在咖啡馆里&#xff0c;周围此起彼伏的对话声中&#xff0c;偶尔会捕捉到一些有趣的片段——这正是dbus-monitor在Linux系统中的角色。而当你需要主动与某人交流时&#xff0c;清晰明确…...

PvZ Toolkit终极指南:解锁植物大战僵尸无限可能的开源修改器

PvZ Toolkit终极指南&#xff1a;解锁植物大战僵尸无限可能的开源修改器 【免费下载链接】pvztoolkit 植物大战僵尸 PC 版综合修改器 项目地址: https://gitcode.com/gh_mirrors/pv/pvztoolkit PvZ Toolkit是一款专为《植物大战僵尸》PC版设计的开源游戏修改工具&#x…...

Diablo Edit2:暗黑破坏神II全版本角色存档编辑器终极指南

Diablo Edit2&#xff1a;暗黑破坏神II全版本角色存档编辑器终极指南 【免费下载链接】diablo_edit Diablo II Character editor. 项目地址: https://gitcode.com/gh_mirrors/di/diablo_edit 你是否厌倦了在暗黑破坏神II中花费数百小时刷装备&#xff1f;是否想要尝试各…...

四款免费抓包工具实战选型指南:HTTPS解密与跨平台调试

1. 抓包这件事&#xff0c;为什么90%的人从一开始就搞错了方向 “免费抓包工具有哪些&#xff1f;”——这是我在技术群、论坛和私信里被问得最多的问题之一。但每次看到这个问题&#xff0c;我都会先反问一句&#xff1a;“你到底想抓什么包&#xff1f;” 不是所有抓包场景…...

哔哩下载姬完整使用指南:免费高效管理B站视频的终极方案

哔哩下载姬完整使用指南&#xff1a;免费高效管理B站视频的终极方案 【免费下载链接】downkyi 哔哩下载姬downkyi&#xff0c;哔哩哔哩网站视频下载工具&#xff0c;支持批量下载&#xff0c;支持8K、HDR、杜比视界&#xff0c;提供工具箱&#xff08;音视频提取、去水印等&…...

jvm垃圾回收器 - G1详解

G1垃圾收集器发展史与工作原理 G1&#xff08;Garbage First&#xff0c;垃圾优先&#xff09;收集器是JVM垃圾收集技术发展史上的里程碑之作&#xff0c;它开创了面向局部收集的设计思路和基于Region的内存布局形式&#xff0c;定位为CMS收集器的替代者和继承人。一、发展史 1…...

IGND算法:融合高斯牛顿法与增量学习的优化新范式

1. IGND算法&#xff1a;当高斯牛顿法遇见增量学习在机器学习的世界里&#xff0c;模型训练的本质就是一场持续的优化之旅。我们手握一个由参数构成的复杂函数&#xff0c;目标是在浩瀚的参数空间中&#xff0c;找到那个能让预测误差最小化的“甜蜜点”。多年来&#xff0c;随机…...

随机森林回归与PISO算法融合:实现CFD在线模型修正与状态估计

1. 项目概述&#xff1a;当随机森林“遇见”PISO算法在计算流体动力学&#xff08;CFD&#xff09;的日常工作中&#xff0c;我们常常面临一个核心矛盾&#xff1a;物理模型的普适性与特定场景的精确性难以兼得。传统的湍流模型&#xff0c;无论是雷诺平均纳维-斯托克斯&#x…...