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高级笔记
Jul 13 Javascript
jQuery源码分析-05异步队列 Deferred 使用介绍
Nov 14 Javascript
jtable列中自定义button示例代码
Nov 21 Javascript
js脚本获取webform服务器控件的方法
May 16 Javascript
jQuery之Deferred对象详解
Sep 04 Javascript
jQuery简单几行代码实现tab切换
Mar 10 Javascript
Angularjs在360兼容模式下取数据缓存问题的解决办法
Jun 22 Javascript
JavaScript使用indexOf()实现数组去重的方法分析
Sep 04 Javascript
jQuery实现的点击图片居中放大缩小功能示例
Jan 16 jQuery
vue v-for直接循环数字实例
Nov 07 Javascript
vue中音频wavesurfer.js的使用方法
Feb 20 Vue.js
微信小程序自定义弹出层效果
May 26 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 保留小数点
2009/04/21 PHP
PHP实现下载功能的代码
2012/09/29 PHP
如何批量替换相对地址为绝对地址(利用bat批处理实现)
2013/05/27 PHP
PHP实现正则匹配所有括号中的内容
2018/06/22 PHP
PHP工厂模式、单例模式与注册树模式实例详解
2019/06/03 PHP
PHP rmdir()函数的用法总结
2019/07/02 PHP
JavaScript 空位补零实现代码
2010/02/26 Javascript
js使用removeChild方法动态删除div元素
2014/08/01 Javascript
JS实现至少包含字母、大小写数字、字符的密码等级的两种方法
2015/02/03 Javascript
javascript原型继承工作原理和实例详解
2016/04/07 Javascript
JS实现保留n位小数的四舍五入问题示例
2016/08/03 Javascript
JS中substring与substr的用法
2016/11/16 Javascript
seajs中模块依赖的加载处理实例分析
2017/10/10 Javascript
详解使用webpack打包编写一个vue-toast插件
2017/11/08 Javascript
layui插件表单验证提交触发提交的例子
2019/09/09 Javascript
js实现图片区域可点击大小随意改变(适用移动端)代码实例
2019/09/11 Javascript
Javascript基于OOP实实现探测器功能代码实例
2020/08/26 Javascript
解决removeEventListener 无法清除监听的问题
2020/10/30 Javascript
JavaScript中的几种继承方法示例
2020/12/06 Javascript
python检测某个变量是否有定义的方法
2015/05/20 Python
Python结巴中文分词工具使用过程中遇到的问题及解决方法
2017/04/15 Python
对Pytorch中nn.ModuleList 和 nn.Sequential详解
2019/08/18 Python
python tkinter之顶层菜单、弹出菜单实例
2020/03/04 Python
python集合的新增元素方法整理
2020/12/07 Python
浅析python实现动态规划背包问题
2020/12/31 Python
Python Pygame实现俄罗斯方块
2021/02/19 Python
利用css3实现的简单的鼠标悬停按钮
2014/11/04 HTML / CSS
css3的transform造成z-index无效解决方案
2014/12/04 HTML / CSS
EMU Australia澳大利亚官网:澳大利亚本土雪地靴品牌
2019/07/24 全球购物
银行演讲稿范文
2014/01/03 职场文书
品质管理部岗位职责范文
2014/03/01 职场文书
党员一句话承诺大全
2014/03/28 职场文书
就业协议书范本
2014/04/11 职场文书
村庄绿化方案
2014/05/07 职场文书
廉洁自律个人总结
2015/02/14 职场文书
新生儿未入户证明
2015/06/23 职场文书