websocket4.0+typescript 实现热更新的方法


Posted in Javascript onAugust 14, 2019

最近搞了一个webpack4+typescript的开发环境,折腾了很久现在记录一下。。。。

本身环境比较好搞,但是热更新是个麻烦事儿

本环境是基于webpack-dev-server搭建的

output: {
  publicPath: '/dist',
  path: path.resolve(__dirname, 'dist'),
  filename: 'ljax.bundle.js',
  hotUpdateChunkFilename: 'hot/hot-update.js',
  hotUpdateMainFilename: 'hot/hot-update.json'
 },

publicPath是必须的字段,不添加HRM就没有效果

在热更新的时候会出现很多hot-update.js和hot-update.json的细碎文件

使用hotUpdateChunkFilename和hotUpdateMainFilename指定他们只生成一个文件,目前没有找到不生成这两个文件的办法,如果哪位大佬知道的话请告知。

plugins: [
  new HtmlWebpackPlugin({
   title: '模块热替换',
   template: './public/index.html'
  }),
  new webpack.HotModuleReplacementPlugin(),
  // 启动输出清理
  new FriendlyErrorsWebpackPlugin({
   compilationSuccessInfo: {
    messages: [`You application is running here ${HTTPS ? 'https' : 'http'}://${HOST}:${PORT}`],
    // notes: ['Some additional notes to be displayed upon successful compilation'],
    clearConsole: true
   },
  })
 ],

HotModuleReplacementPlugin是热更新必不可少的插件

contentBase: __dirname,
  quiet: true,
  compress: true,
  port: PORT,
  host: HOST,
  https: HTTPS,
  // hot: true,
  // hotOnly: true,
  // inline: true,
  open: true,
  overlay: true,
  openPage: './dist/index.html'

最坑的地方来了,我一开始是加上可hot和hotOnly字段的,但是不管是两个都加还是单独使用任何一个,HRM都没有效果。。。。

最后发现两个都不实用就可以。。。。。妈耶,我还是从官网看的这个配置。

到现在也不是很了解是怎么回事。。

最后,贴一下完整的配置吧

webpack.config.js

const path = require('path')
const FriendlyErrorsWebpackPlugin = require('friendly-errors-webpack-plugin')
const webpack = require('webpack')
const HtmlWebpackPlugin = require('html-webpack-plugin')

const HOST = 'localhost'
const PORT = 8080
const HTTPS = false

module.exports = {
 mode: 'development',

 context: __dirname,

 entry: {
  app: './src/index.ts'
 },

 output: {
  publicPath: '/dist',
  path: path.resolve(__dirname, 'dist'),
  filename: 'ljax.bundle.js',
  hotUpdateChunkFilename: 'hot/hot-update.js',
  hotUpdateMainFilename: 'hot/hot-update.json'
 },

 module: {
  rules: [
   { test: /\.ts/, use: 'ts-loader', exclude: /node_modules/ }
  ]
 },

 resolve: {
  extensions: ['.ts', '.js']
 },

 plugins: [
  new HtmlWebpackPlugin({
   title: '模块热替换',
   template: './public/index.html'
  }),
  new webpack.HotModuleReplacementPlugin(),
  // 启动输出清理
  new FriendlyErrorsWebpackPlugin({
   compilationSuccessInfo: {
    messages: [`You application is running here ${HTTPS ? 'https' : 'http'}://${HOST}:${PORT}`],
    // notes: ['Some additional notes to be displayed upon successful compilation'],
    clearConsole: true
   },
  })
 ],

 devServer: {
  contentBase: __dirname,
  quiet: true,
  compress: true,
  port: PORT,
  host: HOST,
  https: HTTPS,
  // hot: true,
  // hotOnly: true,
  // inline: true,
  open: true,
  overlay: true,
  openPage: './dist/index.html'
 }
}

package.json

{
 "name": "ljax",
 "version": "1.0.0",
 "description": "",
 "main": "index.js",
 "scripts": {
  "test": "echo \"Error: no test specified\" && exit 1",
  "watch": "webpack -w",
  "dev-server": "webpack-dev-server",
  "serve": "start yarn dev-server && yarn watch"
 },
 "author": "",
 "license": "ISC",
 "dependencies": {
  "friendly-errors-webpack-plugin": "^1.7.0",
  "html-webpack-plugin": "^3.2.0",
  "ts-loader": "^6.0.4",
  "typescript": "^3.5.3",
  "webpack": "^4.39.1",
  "webpack-dev-server": "^3.7.2"
 },
 "devDependencies": {
  "webpack-cli": "^3.3.6"
 }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JavaScript写的一个自定义弹出式对话框代码
Jan 17 Javascript
文本框倒叙输入让输入框的焦点始终在最开始的位置
Sep 01 Javascript
JavaScript实现动画打开半透明提示层的方法
Apr 21 Javascript
浅谈JavaScript中的对象及Promise对象的实现
Nov 15 Javascript
JavaScript中日常收集常见的10种错误(推荐)
Jan 08 Javascript
jQuery实现对象转为url参数的方法
Jan 11 Javascript
angularjs实现首页轮播图效果
Apr 14 Javascript
浅谈JS中几种轻松处理'this'指向方式
Sep 16 Javascript
JavaScript回调函数callback用法解析
Jan 14 Javascript
nuxt+axios实现打包后动态修改请求地址的方法
Apr 22 Javascript
jQuery HTML css()方法与css类实例详解
May 20 jQuery
Vue3 响应式侦听与计算的实现
Nov 11 Javascript
利用JavaScript的Map提升性能的方法详解
Aug 14 #Javascript
微信小程序 调用远程接口 给全局数组赋值代码实例
Aug 13 #Javascript
vue源码nextTick使用及原理解析
Aug 13 #Javascript
封装微信小程序http拦截器过程解析
Aug 13 #Javascript
Vue中通过Vue.extend动态创建实例的方法
Aug 13 #Javascript
微信小程序封装分享与分销功能过程解析
Aug 13 #Javascript
node删除、复制文件或文件夹示例代码
Aug 13 #Javascript
You might like
php防注入及开发安全详细解析
2013/08/09 PHP
php实现的ping端口函数实例
2014/11/12 PHP
PHP 使用二进制保存用户状态的实例
2018/01/29 PHP
许愿墙中用到的函数
2006/10/07 Javascript
jQuery EasyUI 的EasyLoader功能介绍
2010/09/12 Javascript
一个简单的网站访问JS计数器 刷新1次加1次访问
2012/09/20 Javascript
基于jquery扩展漂亮的下拉框可以二次修改
2013/11/19 Javascript
JS中把字符转成ASCII值的函数示例代码
2013/11/21 Javascript
改变隐藏的input中value的值代码
2013/12/30 Javascript
如何将网页表格内容导入excel
2014/02/18 Javascript
jQuery实现鼠标选中文字后弹出提示窗口效果【附demo源码】
2016/09/05 Javascript
angular.js之路由的选择方法
2016/09/24 Javascript
jQuery中的一些小技巧
2017/01/18 Javascript
AngularJS监听路由变化的方法
2017/03/07 Javascript
JavaScript实现省市联动过程中bug的解决方法
2017/12/04 Javascript
详解javascript 正则表达式之分组与前瞻匹配
2018/05/30 Javascript
Element中的Cascader(级联列表)动态加载省\市\区数据的方法
2019/03/27 Javascript
vue本地打开build后生成的dist文件夹index.html问题
2019/09/04 Javascript
VUE注册全局组件和局部组件过程解析
2019/10/10 Javascript
VUEX采坑之路之获取不到$store的解决方法
2019/11/08 Javascript
Element Dropdown下拉菜单的使用方法
2020/07/26 Javascript
vue实现公共方法抽离
2020/07/31 Javascript
跟老齐学Python之眼花缭乱的运算符
2014/09/14 Python
mysql 之通过配置文件链接数据库
2017/08/12 Python
Python使用matplotlib绘制随机漫步图
2018/08/27 Python
python将txt文件读入为np.array的方法
2018/10/30 Python
canvas简单连线动画的实现代码
2020/02/04 HTML / CSS
Big Green Smile德国网上商店:提供各种天然产品
2018/05/23 全球购物
西班牙语在线票务市场:SuperBoletería
2019/06/10 全球购物
优秀生推荐信范文
2013/11/28 职场文书
九年级化学教学反思
2014/01/28 职场文书
生物科学专业自荐书
2014/06/20 职场文书
检讨书范文2000字
2015/01/28 职场文书
2019暑假阅读倡议书
2019/06/24 职场文书
golang生成vcf通讯录格式文件详情
2022/03/25 Golang
java中为什么说子类的构造方法默认访问的是父类的无参构造方法
2022/04/13 Java/Android