专栏名称: 前端JavaScript
分享 | 学习 | 交流 | 原创 分享是学习的开始;学习不必要从头开始,是从现在开始;交流能沟通你我,提高你的学识;期待你的加入!!! web前端技术交流,JavaScript,HTML5,CSS3……
目录
相关文章推荐
51好读  ›  专栏  ›  前端JavaScript

[S3-E441]Webpack 2: 生产力工具

前端JavaScript  · 公众号  · Javascript  · 2017-10-26 06:08

正文

命令行

命令行方式是最简单的方式, 如果项目只是纯Web前端, 使用这种方式是最便捷的. 只需要在package.json文件中的scripts里面添加下面一行就可以了.


直接命令行:


webpack-dev-server --content-base=www --inline --watch --hot --progress --config webpack.config.js

通过 npm run dev 或 yarn run dev:


// package.json

"scripts": {

"dev": "webpack-dev-server --content-base=www --inline --watch --hot --progress --config webpack.config.js",

...

},

参数说明:


--content-base: 静态资源的目录, 为 output.path 设置的目录.


output: {

path: path.resolve(__dirname, 'dist'),

},

--watch: 监视模式, Web执行完打包后不退出, 一直监听文件变化, Ctrl + S后自动构建变化的模块, 及其依赖模块.

--hot: 开启模块热替换.

--progress: 显示进度

--config: 指定配置文件 webpack.config.js 为默认文件名.


Webpack API

API的方式需要对webpack.config.js配置文件进行修改, 增加HotModuleReplacementPlugin插件.


Webpack 1.x


const path = require('path');

const webpack = require('webpack');


module.exports = {

context: path.join(__dirname, 'js'),

entry: [

'./index.js',

'webpack/hot/dev-server',

'webpack-dev-server/client?http://localhost:8080/',

],

output: {

path: path.join(__dirname, 'www'),

filename: 'bundle.js',

publicPath: '/',

},

plugins: [

new webpack.HotModuleReplacementPlugin(),

],

};

Webpack 2.x


Webpack 2.x 需要一个额外配置 .babelrc, 增加 react-hot-loader/babel:


{

"presets": [

"es2015",

"react",

"stage-0"

],

"plugins": [

"react-hot-loader/babel"

]

}

webpack.config.js 模块加载器的配置, 和Webpack 1.x是不同的:


rules: [

// Javascript模块加载器

{

test: /\.js|jsx$/,

exclude: /(node_modules|bower_components)/,

use: {

loader: 'babel-loader',

options: {

cacheDirectory : true,

presets: [

['es2015', {modules: false}]

],

// ES7

plugins: [

// 模块动态导入

'syntax-dynamic-import',

'transform-async-to-generator',

'transform-regenerator',

// 运行时转换

'transform-runtime'

]

}

}

},


中间件

需要编写一个Express服务器, 并且把 webpack-dev-middleware 集成到自己的服务器中. 多用于需要高度定制的场景, 实际上之前的webpack-dev-server就是使用的 webpack-dev-middleware 来实现的, 这里可以证明( https://github.com/webpack/webpack-dev-server/blob/master/package.json#L25 ).


const express = require('express');

const webpackDevMiddleware = require('webpack-dev-middleware');

const webpackHotMiddleware = require('webpack-hot-middleware');

const webpack = require('webpack');

const webpackConfig = require('./webpack.config.js');

const app = express();


const compiler = webpack(webpackConfig);


app.use(webpackDevMiddleware(compiler, {

// 启用热更

hot: true,

filename: 'bundle.js',

publicPath: '/assets/',

stats: {

colors: true,

},

// 路由需要的

historyApiFallback: true,

}));


app.use(webpackHotMiddleware(compiler, {

log: console.log,

path: '/__webpack_hmr',

heartbeat: 10 * 1000,

}));


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

res.send('

Hello World






请到「今天看啥」查看全文