详解webpack2+node+react+babel实现热加载(hmr)

前端之家收集整理的这篇文章主要介绍了详解webpack2+node+react+babel实现热加载(hmr)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

前端工程化开发的一个重要标志就是热替换技术,它大大的提高开发效率,使我们专注于写代码,webpack2中的热替换相比较1更加简洁。

1. 先看效果

2.目录结构

3.项目目录结构文件描述

bin 执行文件

node_modules node包

public 静态资源文件

  • static 静态资源
  • dist 编译后文件

src 项目js文件

.bablrc babel配置文件

webpack.config.dev.js开发模式webpack配置

webpack.config.pro.js生产模式webpack配置

3.技术依赖

  • node
  • react
  • babel
  • ES6/ES2015
  • react-hmre
  • webpack

babel-loader,css-loader,sass-loader,style-loader,webpack-hot-middleware,webpack-hot-middleware

热加载最重要的几个配置是packge.json/devserver.js/webpack.config.dev.js/webpack.config.prod.js/.babelrc

packge.json

css-loader": "^0.28.5","eventsource-polyfill": "^0.9.6","node-sass": "^4.5.3","sass-loader": "^6.0.6","style-loader": "^0.18.2","webpack": "^3.5.5","webpack-dev-middleware": "^1.12.0","webpack-hot-middleware": "^2.18.2" } }

scripts的几个命令

webpack.config.dev.js

module.exports = {

devtool: 'cheap-module-eval-source-map',//打包构建信息

entry: [

'eventsource-polyfill',//for IE
'webpack-hot-middleware/client',//webpack服务连接到浏览器接收更新

'./src/index.js'

],output: {
filename: 'boundle.js',publicPath: '/dist/js/'
},module: {

loaders: [{
    test: /\.js$/,loaders: ['babel-loader'],exclude: /node_modules/ //哪些<a href="https://www.jb51.cc/tag/wenjian/" target="_blank" class="keywords">文件</a>下的需要用到babel
  },{
    test: /\.css$/,loaders: ['style-loader','<a href="https://www.jb51.cc/tag/css/" target="_blank" class="keywords">css-</a>loader'],},{
    test: /\.scss$/,'<a href="https://www.jb51.cc/tag/css/" target="_blank" class="keywords">css-</a>loader','sass-loader'],{
    test: /\.(png|jpg|gif)$/,loaders: ['url?limit=8192&name=images/[name].[ext]'],}
]

},resolve:{

alias: {

  css: path.resolve(__dirname,'public/static/css/'),//css目录别名
}

},plugins: [

new webpack.HotModuleReplacementPlugin(),//热替换<a href="https://www.jb51.cc/tag/chajian/" target="_blank" class="keywords">插件</a>
new webpack.NoEmitOnErrorsPlugin()

]
};

.babelrc

"presets": ["react-hmre"] }

}
}

devserver.js

var app = express();
var compiler = webpack(config);

var webpackDevMiddleware = require("webpack-dev-middleware");

app.use(webpackDevMiddleware(compiler,{

noInfo: false,//true将打印编译信息(建议false,true会打印很多信息)
publicPath: config.output.publicPath //绑定middleware
}));

var webpackHotMiddleware = require('webpack-hot-middleware');
app.use(webpackHotMiddleware(compiler));

app.get('*',function(req,res) {

res.sendFile(path.resolve(__dirname,'../index.html')); //
});

app.listen(3100,function(err) {

if (err) {
console.log(err);
return;
}
console.log('Listening at http://localhost:3100');
});

这样就可以实现热加载了,在项目根目录执行

webpack.config.prod.js

module.exports = {
devtool: 'cheap-module-eval-source-map',entry: [
'./src/index.js'
],output: {

path: path.join(__dirname,'public/dist/js'),filename: 'boundle.js',exclude: /node_modules/ 
  },resolve:{
alias: {
  css: path.resolve(__dirname,img: path.resolve(__dirname,'public/static/img/'),}

},plugins: [

 new webpack.HotModuleReplacementPlugin(),new webpack.NoEmitOnErrorsPlugin(),new webpack.optimize.UglifyJsPlugin({
     compress: {
      warnings: false
    }
  })

]

};

生产的webpack主要完成开发后的编译打包,在plugins里多了压缩插件,在项目根目录执行

bin/server.js

生产环境启动文件

var oneYear = 60 1000 60 24 30;

app.use(express.static(path.resolve(__dirname,'../public'),{ maxAge: oneYear }));

app.get('*','../index.html'));
});

app.listen(3200,function(err) {

if (err) {
console.log(err);
return;
}
console.log('Listening at http://localhost:3200');

});

这里是项目地址 https://github.com/leinov/react-hmr-demo

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程之家。

原文链接:https://www.f2er.com/nodejs/36886.html

猜你在找的Node.js相关文章