>웹 프론트엔드 >JS 튜토리얼 >HMR/핫 업데이트를 웹팩의 핫 모듈로 교체하기 위한 구체적인 단계

HMR/핫 업데이트를 웹팩의 핫 모듈로 교체하기 위한 구체적인 단계

php中世界最好的语言
php中世界最好的语言원래의
2018-04-08 09:26:492230검색

이번에는 HMR/핫 업데이트를 웹팩의 핫 모듈로 교체하는 구체적인 단계를 알려드리겠습니다. 웹팩의 핫 모듈이 HMR/핫 업데이트를 교체할 때의 주의 사항은 무엇입니까? 실제 사례를 살펴보겠습니다.

핫 업데이트라고도 불리는 웹팩 핫 모듈 교체(반응이 필요하지 않음)의 가장 간단한 구성에 대한 기사입니다.

핫 모듈 교체(HMR) 기능은 애플리케이션이 실행 중일 때 페이지를 새로 고치지 않고도 필요한 모듈을 교체, 추가 또는 삭제할 수 있다는 것입니다. HMR은 단일 상태 트리로 구성된 애플리케이션에 유용합니다. 이러한 응용 프로그램의 구성 요소는 "멍청한"("스마트"와 반대) 구성 요소의 코드가 변경된 후에도 구성 요소의 상태가 여전히 응용 프로그램의 최신 상태를 올바르게 반영할 수 있습니다.

webpack-dev-server에는 페이지를 자동으로 새로 고치는 "라이브 새로 고침"이 내장되어 있습니다.

파일 디렉터리는 다음과 같습니다.

  1. app

    1. a.js

    2. comComponent.js

    3. index.js

  2. node _ 모듈

  3. 패키지. json

  4. webpack.config.js

comComponent.js가 a.js를 가져왔습니다. index.js는 component.js를 가져옵니다. 모든 파일을 수정하면 핫 업데이트 기능을 얻을 수 있습니다.

가장 중요한 것은 index.js에 다음과 같은 코드가 있다는 것입니다. (핫 업데이트를 완료하는 데 필요)

if(module.hot){
  module.hot.accept(moduleId, callback);
}

다음은 package.json 구성입니다.

{
 "name": "webpack-hmr",
 "version": "1.0.0",
 "description": "",
 "main": "index.js",
 "scripts": {
  "start": "nodemon --watch webpack.config.js --exec \"webpack-dev-server --env development\"",
  "build": "webpack --env production"
 },
 "keywords": [],
 "author": "",
 "license": "ISC",
 "devDependencies": {
  "html-webpack-plugin": "^2.28.0",
  "nodemon": "^1.11.0",
  "webpack": "^2.2.1",
  "webpack-dev-server": "^2.4.1"
 }
}

다음과 같은 종속성에서 확인할 수 있습니다. 이것은 실제로 가장 간단한 구성입니다. 그 중 nodemon은 webpack.config.js 파일의 상태를 모니터링하는 데 사용되며 변경 사항이 있는 한 해당 명령이 다시 실행됩니다.

"html-webpack-plugin"은 여기서 생략 가능합니다. 구체적인 구성은 https://www.npmjs.com/package/html-webpack-plugin을 참조하세요.

여기에는 두 가지 명령이 정의되어 있습니다. 하나는 개발 환경에서 사용되는 start이고, 다른 하나는 프로덕션 환경에서 사용되는 build입니다. --watch는 하나 이상의 파일을 모니터링하는 데 사용되며 --exec는 nodemon에서 다른 명령을 실행하는 데 사용됩니다. 구체적인 구성은 https://c9.io/remy/nodemon을 참조하세요.

다음 단계는 webpack.config.js입니다. package.json의 스크립트에 두 가지 명령이 정의되어 있으므로 구성 파일에서 두 가지 상황(개발 및 프로덕션)을 구현해야 합니다. 그 중 하나입니다.)

const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const webpack = require('webpack');
const PATHS = {
 app: path.join(dirname, 'app'),
 build: path.join(dirname, 'build'),
};
const commonConfig={
 entry: {
  app: PATHS.app + '/index.js',
 },
 output: {
  path: PATHS.build,
  filename: '[name].js',
 },
 watch: true,
 plugins: [
  new HtmlWebpackPlugin({
   title: 'Webpack demo',
  }),
 ],
}
function developmentConfig(){
 const config ={
  devServer:{
   historyApiFallback:true, //404s fallback to ./index.html
   // hotOnly:true, 使用hotOnly和hot都可以
   hot: true,
   stats:'errors-only', //只在发生错误时输出
   // host:process.env.Host, 这里是undefined,参考的别人文章有这个
   // port:process.env.PORT, 这里是undefined,参考的别人文章有这个
   overlay:{ //当有编译错误或者警告的时候显示一个全屏overlay
    errors:true,
    warnings:true,
   }
  },
   plugins: [
   new webpack.HotModuleReplacementPlugin(),
   new webpack.NamedModulesPlugin(), // 更新组件时在控制台输出组件的路径而不是数字ID,用在开发模式
   // new webpack.HashedModuleIdsPlugin(), // 用在生产模式
  ],
 };
 return Object.assign( 
  {},
  commonConfig,
  config,
  {
   plugins: commonConfig.plugins.concat(config.plugins),
  }
 );
}
module.exports = function(env){
 console.log("env",env);
 if(env=='development'){
  return developmentConfig();
 }
 return commonConfig;
};

Object.sign의 경우 첫 번째 매개변수가 대상 객체이고, 대상 객체의 속성이 동일한 키를 갖는 경우 소스의 속성이 해당 속성을 덮어씁니다. 이후 소스의 속성은 유사하게 이전 속성을 재정의합니다. 얕은 할당, 개체 복사, 즉 참조 복사에는 =를 사용합니다.

env 매개변수는 cli를 통해 전달됩니다.

그런 다음 현재 디렉터리에 대한 명령줄을 열고 npm start 또는 npm run build를 실행하세요. 전자는 개발 환경에 있으며 출력 파일(메모리에)이 없습니다. 후자를 실행할 때만 출력 파일이 있습니다.

데모 코드는 https://github.com/yuwanlin/webpackHMR

에 있습니다. 이 글의 사례를 읽으신 후 방법을 마스터하셨으리라 믿습니다. 더 흥미로운 정보를 보려면 다른 관련 기사를 주목해 주세요. PHP 중국어 웹사이트에서!

추천 도서:

JS를 사용하여 현재 페이지에 스크롤 막대가 있는지 확인하는 방법

vue에서 mint-ui를 사용하는 방법

위 내용은 HMR/핫 업데이트를 웹팩의 핫 모듈로 교체하기 위한 구체적인 단계의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.