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 相关文章推荐
js 深拷贝函数
Dec 04 Javascript
javascript下4个跨浏览器必备的函数
Mar 07 Javascript
json属性名为什么要双引号(个人猜测)
Jul 31 Javascript
JavaScript定时显示广告代码分享
Mar 02 Javascript
javascript跨域总结之window.name实现的跨域数据传输
Nov 01 Javascript
javascript和jQuery中的AJAX技术详解【包含AJAX各种跨域技术】
Dec 15 Javascript
详解vue如何使用rules对表单字段进行校验
Oct 17 Javascript
微信小程序入口场景的问题集合与相关解决方法
Jun 26 Javascript
vue + axios get下载文件功能
Sep 25 Javascript
jquery使用echarts实现有向图可视化功能示例
Nov 25 jQuery
Vite和Vue CLI的优劣
Jan 30 Vue.js
原型和原型链 prototype和proto的区别详情
Nov 02 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
Thinkphp中数据按分类嵌套循环实现方法
2014/10/30 PHP
PHP实现恶意DDOS攻击避免带宽占用问题方法
2015/05/27 PHP
php远程下载类分享
2016/04/13 PHP
PHP中explode函数和split函数的区别小结
2016/08/24 PHP
laravel多条件查询方法(and,or嵌套查询)
2019/10/09 PHP
JS应用之禁止抓屏、复制、打印
2008/02/21 Javascript
jQuery(非HTML5)可编辑表格实现代码
2012/12/11 Javascript
通过js获取div的background-image属性
2013/10/15 Javascript
Jquery.Form 异步提交表单的简单实例
2014/03/03 Javascript
node.js中的fs.stat方法使用说明
2014/12/16 Javascript
用JavaScript实现对话框的教程
2015/06/04 Javascript
jQuery插件datatables使用教程
2016/04/21 Javascript
js改变style样式和css样式的简单实例
2016/06/28 Javascript
关于JavaScript中的this指向问题总结篇
2017/07/23 Javascript
js/jQuery实现全选效果
2019/06/17 jQuery
bootstrap table插件动态加载表头
2019/07/19 Javascript
maptalks+three.js+vue webpack实现二维地图上贴三维模型操作
2020/08/10 Javascript
解决ant design vue中树形控件defaultExpandAll设置无效的问题
2020/10/26 Javascript
[01:48]完美圣典齐天大圣至宝宣传片
2016/12/17 DOTA
Python中实现常量(Const)功能
2015/01/28 Python
Python实现图片拼接的代码
2018/07/02 Python
python pickle存储、读取大数据量列表、字典数据的方法
2019/07/07 Python
Django rest framework jwt的使用方法详解
2019/08/08 Python
python进行二次方程式计算的实例讲解
2020/12/06 Python
HTML5播放实现rtmp流直播
2020/06/16 HTML / CSS
墨西哥网上购物:Linio墨西哥
2016/10/20 全球购物
架构师岗位职责
2013/11/18 职场文书
甜品蛋糕店创业计划书范文
2014/02/06 职场文书
欠款起诉书范文
2015/05/19 职场文书
干部培训简讯
2015/07/20 职场文书
2016年“我们的节日·端午节”活动总结
2016/04/01 职场文书
TV动画「神渣☆爱豆」公开第一弹主视觉图
2022/03/21 日漫
CentOS下安装Jenkins的完整步骤
2022/04/07 Servers
MySQL数据库如何使用Shell进行连接
2022/04/12 MySQL
vue项目打包后路由错误的解决方法
2022/04/13 Vue.js
Java 死锁解决方案
2022/05/11 Java/Android