javascript - 忽略了对未接受模块的更新

标签 javascript webpack webpack-dev-server webpack-hmr

控制台输出Ignored an update to unaccepted module错误,如何解决?

log.js:25 Ignored an update to unaccepted module ./src/print.js -> 1
log.js:25 [HMR] The following modules couldn't be hot updated: (They would need a full reload!)
log.js:25 [HMR]  - ./src/print.js

整个控制台消息是:

log.js:23 [HMR] Waiting for update signal from WDS...
log.js:23 [HMR] Waiting for update signal from WDS...
client?cd17:64 [WDS] Hot Module Replacement enabled.
client?cd17:64 [WDS] Hot Module Replacement enabled.
client?cd17:67 [WDS] App updated. Recompiling...
client?cd17:67 [WDS] App updated. Recompiling...
client?cd17:67 [WDS] App updated. Recompiling...
client?cd17:67 [WDS] App updated. Recompiling...
client?cd17:193 [WDS] App hot update...
log.js:23 [HMR] Checking for updates on the server...
client?cd17:193 [WDS] App hot update...
log.js:23 [HMR] Checking for updates on the server...
log.js:25 Ignored an update to unaccepted module ./src/print.js -> 1
./node_modules/webpack/hot/log.js.module.exports @ log.js:25
onUnaccepted @ only-dev-server.js:25
hotApply @ bootstrap e5893b5…:437
(anonymous) @ only-dev-server.js:20
log.js:25 [HMR] The following modules couldn't be hot updated: (They would need a full reload!)
./node_modules/webpack/hot/log.js.module.exports @ log.js:25
./node_modules/webpack/hot/log-apply-result.js.module.exports @ log-apply-result.js:12
(anonymous) @ only-dev-server.js:39
log.js:25 [HMR]  - ./src/print.js
./node_modules/webpack/hot/log.js.module.exports @ log.js:25
(anonymous) @ log-apply-result.js:14
./node_modules/webpack/hot/log-apply-result.js.module.exports @ log-apply-result.js:13
(anonymous) @ only-dev-server.js:39
log.js:23 [HMR] Nothing hot updated.
log.js:23 [HMR] App is up to date.
index.js:8 Accepting the updated printMe module!
log.js:23 [HMR] Updated modules:
log.js:23 [HMR]  - ./src/print.js
log.js:23 [HMR] App is up to date.

以下是我的代码:

webpack.config.js:

const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const CleanWebpackPlugin = require('clean-webpack-plugin');
const webpack = require('webpack');

module.exports = {
  devtool: 'inline-source-map',
  devServer: {
    contentBase: path.resolve(__dirname, 'dist'),
    hotOnly: true,
  },
  entry: {
    app: './src/index.js',
    print: './src/print.js'
  },
  output: {
    filename: '[name].bundle.js',
    path: path.resolve(__dirname, 'dist'),
  },
  plugins: [
    new HtmlWebpackPlugin({
      title: 'Hot Module Replacement',
      filename: 'index.html',
    }),
    new CleanWebpackPlugin(['dist']),
    new webpack.HotModuleReplacementPlugin(),
    new webpack.NamedModulesPlugin(),
  ],
};

./src/index.js:

import _ from 'lodash';
import printMe from './print.js';

if(module.hot) {
  module.hot.accept('./print.js', function() {
    console.log('Accepting the updated printMe module!');

    document.body.removeChild(element);
    element = component();
    document.body.appendChild(element);
  });
}

let element = component();

function component() {
  const element = document.createElement('div');
  const btn = document.createElement('button');

  element.innerHTML = _.join(['Hell', 'webpack'], ' ');

  btn.innerHTML = 'Click me and check the console!';
  btn.onclick = printMe;

  element.appendChild(btn);

  return element;
}

document.body.appendChild(element);

./src/print.js:

export default function printMe() {
  //console.log('I get called from print.js!');
  console.log('Updating print.js...')
}

package.json:

{
  "name": "webpack-demo",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "build": "webpack",
    "start": "webpack-dev-server --open"
  },
  "keywords": [
    "webpack",
    "demo"
  ],
  "author": "",
  "license": "MIT",
  "dependencies": {
    "lodash": "^4.17.4"
  },
  "devDependencies": {
    "clean-webpack-plugin": "^0.1.16",
    "html-webpack-plugin": "^2.29.0",
    "webpack": "^3.4.1",
    "webpack-dev-server": "^2.6.1"
  }
}

其他环境:

  • 节点 v7.4.0
  • npm 4.0.5
  • macOS 塞拉利昂 10.12
  • Chrome v59.0.3071.115

请给我帮助。

最佳答案

经过调试和测试,我想我知道答案了。

Webpack-dev-server 为每个条目创建一个客户端脚本。

当我不写任何 HMR 接口(interface)时,控制台输出如下:

enter image description here

似乎对于 app(./src/index.js) 客户端脚本,index.js 将接受其依赖项的更改 - 打印.js.

但对于 print(./src/print.js) 客户端脚本,没有任何东西会接受其依赖项的更改 - print.js

因此,仅在 index.js 中编写 HMR 接口(interface)不适用于第二种情况,它会抛出 Ignored an update to unaccepted module 错误。

关于javascript - 忽略了对未接受模块的更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45520707/

相关文章:

webpack - Webpack 4 中的 webpack-dev-server 的替代品是什么?

docker - sockjs-node路径被webpack-dev-server baseUrl覆盖

javascript - 一个非常简单的查询 - 使用 webpack 加载普通的旧 javascript 文件

javascript - 滑动手指时 ionic 变形屏幕

node.js - Yarn - Node Sass 还不支持我当前的环境

reactjs - 如何使用 HTTPS 启动 React 项目

reactjs - Webpack 开发服务器刷新循环疯狂

javascript - 如何将Raphael JS纸张的宽度和高度设置为与其包含的div相同?

javascript - 从 JSON 数组中检索与键相关的特定值

javascript - AngularClass/angular2-webpack-starter : exclude mock files from webpack config for PROD builds