开始学习Webpack-应用TypeScript,配置热加载和Source Map

2023-11-13

项目初始化:采用TypeScript

我们的版本是:

$ node --version
v8.5.0
$ npm --version
5.5.1
 
 
 
 
  • 1
  • 2
  • 3
  • 4

npm版本升级了,因为npm最近带来了新特性,本地会生成package-lock.json,能
提高一些性能,想知道更多的,可以google一下。

创建目录初始结构:

$ mkdir pickle
$ cd pickle
$ touch index.html
$ touch index.ts
$ touch webpack.config.js
 
 
 
 
  • 1
  • 2
  • 3
  • 4
  • 5

初始化package.json

$ npm init --force
Wrote to /Users/abraham/dev/pickle/package.json:
...
 
 
 
 
  • 1
  • 2
  • 3

–force是告诉自动采用默认配置。
安装相应的包:

$ npm install --save-dev typescript ts-loader webpack http-server
+ typescript@2.5.2
+ ts-loader@2.3.7
+ webpack@3.6.0
+ http-server@0.10.0
added 394 packages in 17.115s
 
 
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

创建tsconfig.json文件:(这里采用本地的typescript包,你也可以全局安装)

$ ./node_modules/typescript/bin/tsc --init(全局安装生成tsconfig.json文件命令:tsc  --init;
本地安装生成tsconfig.json文件命令(windows下):.\node_modules\.bin\tsc --init)
message TS6071: Successfully created a tsconfig.json file.
 
 
 
 
  • 1
  • 2

webpack.config.js:

const path = require('path');
module.exports = {
  entry: './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')
  }
};
 
 
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

修改pacakge.json:

{
  ...
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "build": "webpack",
    "serve": "http-server"
  },
  ...
}
 
 
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

然后你跑如下命令,可以看到:

$ npm run build
> pickle@1.0.0 build /Users/abraham/dev/pickle
> webpack
ts-loader: Using typescript@2.5.2 and /Users/abraham/dev/pickle/tsconfig.json
Hash: 8b5d98f242aeda6844bb
Version: webpack 3.6.0
Time: 815ms
    Asset Size Chunks Chunk Names
bundle.js 2.51 kB 0 [emitted] main
   [0] ./index.ts 14 bytes {0} [built]
 
 
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

修改index.html:

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>Pickle</title>
</head>
<body>
  <h1>Welcome to Pickle</h1>
  <label for="color-picker">Select a new background color</label>
  <input id="color-picker" type="color" value="#2196F3">
  <script defer src="dist/bundle.js"></script>
</body>
</html>
 
 
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
class Pickle {
  constructor(private picker: Element, private background: HTMLElement) {
    picker.addEventListener('change', this.colorChange.bind(this), false);
    this.background = background;
  }
  colorChange(event: Event): void {
    // `<HTMLInputElement>` tells TypeScript what type `target` is so that it knows there is a `value` property available.
    let input = <HTMLInputElement>event.target;
    this.background.style.backgroundColor = input.value;
  }
}
let picker = document.querySelector('#color-picker');
// The if avoids TypeScript complaining that `picker` might be null.
if (picker) {
  new Pickle(picker, document.body);
}
 
 
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

然后运行:

$ npm run build
...
$ npm run serve
> http-server
Starting up http-server, serving ./
Available on:
  http://127.0.0.1:8080
  http://192.168.200.8:8080
Hit CTRL-C to stop the server
 
 
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

浏览器访问:http://127.0.0.1:8080

webpack热加载配置(修改代码,自动刷新代码)

我们的package.json的script长这样:

{
  ...
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "build": "webpack",
    "serve": "http-server",
    "watch": "webpack --watch"
  },
  ...
}
 
 
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

运行npm run watch后是这样:

$ npm run watch
> pickle@1.0.0 watch /Users/abraham/dev/pickle
> webpack --watch
Webpack is watching the files…
ts-loader: Using typescript@2.5.3 and /Users/abraham/dev/pickle/tsconfig.json
Hash: 16fb35ccc9f9b3f14c5d
Version: webpack 3.8.1
Time: 957ms
    Asset Size Chunks Chunk Names
bundle.js 3.27 kB 0 [emitted] main
   [0] ./index.ts 775 bytes {0} [built]
 
 
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

当然我们可以直接合并命令:

{
  ...
  "serve": "npm run watch & http-server"
  ...
}
 
 
 
 
  • 1
  • 2
  • 3
  • 4
  • 5

然后直接运行npm run serve就行了。Webpack会自动监听和编译我们的代码。
进一步,我们希望支持Hot Module Replacement(支持模块级别的自动刷新,而不需要刷新浏览器),
需要安装如下两个东西:

$ npm install --save-dev webpack-dev-server
+ webpack-dev-server@2.9.2
added 165 packages in 10.49s
$ npm install --save-dev html-webpack-plugin
+ html-webpack-plugin@2.30.1
added 38 packages and removed 11 packages in 4.662s

 
 
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

修改配置webpack.config.js:

module.exports = {
  ...
  devServer: {
    contentBase: path.resolve(__dirname, '.') ,
    hot: true
  }
  ...
};
 
 
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

依赖它们:

const webpack = require('webpack');
const HtmlWebpackPlugin = require('html-webpack-plugin');
...
 
 
 
 
  • 1
  • 2
  • 3

添加插件:

module.exports = {
  ...
  plugins: [
    new HtmlWebpackPlugin({
      filename: 'index.html',
      template: 'index.html'
    }),
    new webpack.NamedModulesPlugin(),
    new webpack.HotModuleReplacementPlugin()
  ]
  ...
};
 
 
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

HotModuleReplacementPlugin 插件是告诉我们用热加载
NamedModulesPlugin 是用来清空编译日志的,这样只会显示我们入口文件信息。
HtmlWebpackPlugin 会把根目录的template文件(index.html),输出到dist目录的filename指定的文件名。这样webpack可以自动在index.html里面添加script标签,所以我们的index.html里面不需要:

修改package.json:

{
  ...
  "serve": "webpack-dev-server --open"
  ...
}
 
 
 
 
  • 1
  • 2
  • 3
  • 4
  • 5

–open告诉webpack在浏览器打开我们的页面。
运行npm run serve就行了。大功告成。

webpack支持source maps

修改tsconfig.json:、

{
  ...
  "sourceMap": true,
  ...
}
 
 
 
 
  • 1
  • 2
  • 3
  • 4
  • 5

修改webpack.config.js:

module.exports = {
  ...
  devtool: 'eval-source-map'
};
 
 
 
 
  • 1
  • 2
  • 3
  • 4

以上就是今天的内容,不知道你学会了webpack配置,TypeScript会用了吗?
原文链接:https://bendyworks.com/blog/getting-started-with-webpack-source-maps

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

开始学习Webpack-应用TypeScript,配置热加载和Source Map 的相关文章

随机推荐

  • THE、QS等四大世界大学排名对比 计算机专业究竟哪家强?

    泰晤士高等教育世界大学排名 QS世界大学排名 USNews世界大学排名 上海软科世界大学学术排名是公认的四大权威世界大学排名 今年9月 英国 泰晤士高等教育 Times Higher Education 简称THE 发布了2020世界大学排
  • Linux下编辑并保存文件操作步骤

    墙裂建议看下 戳 vi 和 VIM的区别 详细介绍了编辑文件保存 步骤一 打开命令控制台找到要编辑的文件 可执行命令ls看看下面有几个文件 如要编辑的文件名称为 test 步骤二 打开文件 命令 vi 文件名 如打开文件test vi te
  • 编译器一定会生成默认构造函数和默认析构函数吗-不一定

    构造函数 以下四种情况同时满足时 编译器认为不用生成默认构造函数 1 没有虚函数 2 非静态成员没有 或者 的初始化 比如 int x 3 编译器就会给生成默认构造函数 3 直接继承的基类没有默认构造函数 4 成员函数没有默认构造函数 反过
  • AssetBundle详解与优化

    https www jianshu com p 5226659533cd 1 AssetBundle原理 AssetBundle是Unity中的一种资源包 这种资源包可以是游戏内要用到的几乎所有资源 例如 模型 纹理 预设 场景等大部分文件
  • Windows小技巧13-Windows10无法与时间服务器同步

    Windows小技巧13 Windows10无法与时间服务器同步 异常概述 解决方法 说明 异常概述 最近打开windows 同步时间 发现经常报同步失败的错误 具体如下图所示 经过几次查阅 重试 发现可以自己选择或者定义其他 ntp 同步
  • TestNG+Mybatis+Extent+lombok管理测试

    一 项目结构 maven引入jar包
  • GqlQuery 类

    http wapbaike baidu com view 8965981 htm uid D0604A052A48B0F5013EC29A99F19073 bd page type 1 st 3 step 2 net 0 ldr 0 概述
  • csv反序列化_Python实现序列化及csv文件读取

    导读热词 这篇文章主要介绍了Python实现序列化及csv文件读取 文中通过示例代码介绍的非常详细 对大家的学习或者工作具有一定的参考学习价值 需要的朋友可以参考下 一 python 序列化 序列化指的是将对象转化为 串行化 数据形式 存储
  • 阿里达摩院金榕:从技术到科学,中国AI向何处去?

    点击下方卡片 关注 CVer 公众号 AI CV重磅干货 第一时间送达 本文转载自 机器之心 作者 金榕 阿里巴巴达摩院副院长 原密歇根州立大学终身教授 如果从达特茅斯会议起算 AI 已经走过 65 年历程 尤其是近些年深度学习兴起后 AI
  • Python爬虫的解析(学习于b站尚硅谷)

    目录 一 xpath 1 xpath插件的安装 2 xpath的基本使用 1 xpath的使用方法与基本语法 路径查询 谓词查询 内容查询 使用text查看标签内容 属性查询 模糊查询 逻辑运算 2 安装lxml库 3 代码的演示 3 获取
  • cmake升级及多版本管理

    查看原有的cmake cmake version which cmake gt gt gt usr bin cmake 下载要装的cmake源文件 解压并进入 使用已有的cmake安装 mkdir build cd build cmake
  • 计算机操作系统面试题

    一 认识汇编语言 汇编的本质是机器语言的助记符号 汇编语言本质就是机器语言 二 CPU的基本组成 PC 程序计数器 记录将要执行的指令的地址 Registers 暂时存储CPU计算需要用到的数据 ALU 寄存器中取到数据 进行运算然后将结果
  • 分布式存储基础知识

    2018 4 26 分布式存储的数据类型有以下三类 非结构化的数据 主要是数据之间的关联系不大 像文本图片之类的数据 结构化的数据 数据之间关联系很大 关系型数据库这种 可以用表进行表示的 半结构化的数据 介于上述两种数据类型之间 数据之间
  • DCMTK解析DICOM汇总

    DICOM头信息示例如下 0002 0000 Group Length VR UL Length 4 Value 184 0002 0001 File Meta Information Version VR OB Length 2 Valu
  • 抖音综合榜单数据爬虫案例

    偶然在抖音创作平台中看到了一系列的排行榜 如热搜榜 热门视频榜 娱乐明星榜 音乐榜等等 网页链接 https creator douyin com billboard home 登陆后可见数据 榜单接口 接口名 类型 链接 热搜榜单 Get
  • SNPP/VIIRS 数据介绍和下载

    SNPP VIIRS 数据介绍和下载 最近刚接触VIIRS卫星数据 用于洪水监测 主要记录VIIRS数据相关资料和数据下载方法 一 VIIRS数据简介 1 NPP卫星系统 NPP National Polar orbiting Partne
  • 一个自动生成卡通头像的工具网站

    1 打开网站 https deepai org machine learning model toonify 2 选择照片 3 上传照片 4 结果
  • flutter 获取屏幕宽度工具类

    import dart ui 工具类 class GlobalUtils static num screenW 0 设备的宽高 static num screenH 0 设备的宽高 static num devicePixelRatio 0
  • 在IE9使用CORS的思路——XDomainRequest

    前端最常用的就是CORS来调用Restful接口 但是IE9却真够侘寂的 连常规的XHR都不能完整支持 于是 动手写一遍IE10以下专属的 XDomainRequest 但是我测试了一下XDomainRequest 它能接收html tex
  • 开始学习Webpack-应用TypeScript,配置热加载和Source Map

    项目初始化 采用TypeScript 我们的版本是 node version v8 5 0 npm version 5 5 1 1 2 3 4 npm版本升级了 因为npm最近带来了新特性 本地会生成package lock json 能