前言
webpack-dev-server
就是一个基于Node.js
和webpack
的一个简易服务器。它在服务器端使用webpack-dev-middleware
进行webpack
构建打包;并在客户端注入一份runtime
,用于接受服务器端的构建打包后信息。只需要提供一份简单的webpack
配置文件,在命令行中运行wbepack-dev-server
即可运行起来。
安装
npm install webpack-dev-server --save-dev
什么是 webpack-dev-server
webpack-dev-server就是一个基于Node.js和webpack的一个简易服务器。它在服务器端使用webpack-dev-middleware进行webpack构建打包;并在客户端注入一份runtime,用于接受服务器端的构建打包后信息。只需要提供一份简单的webpack配置文件,在命令行中运行wbepack-dev-server即可运行起来。
var path = require("path");
module.exports = {
entry: {
// 以./app/main.js作为入口文件,构建输出app.js
app: ["./app/main.js"]
},
output: {
// 将构建打包输出的app.js放到build目录下
path: path.resolve(__dirname, "build"),
// webpack构建输出的临时文件存放到内存中,而且是以publicPath作为相对路径。
// publicPath并不会影响输出目录
// 此外,如果指定路径下已经存在了相同文件,webpack会优先使用内存的临时文件
publicPath: "/assets/",
// 可以对构建输出的app.js进行二次定制化命名,比如加时间戳等
filename: "[name].js"
}
};
上面这份配置告诉webpack如何进行模块化管理,如何打包输出,我们就可以通过localhost:[port]/assets/bundle.js访问到构建后的打包文件。也就是说,webpack-dev-server底层一方面使用webpack在服务器端进行构建打包,一方面在客户端注入runtime以便和服务器端建立联系。显然,我们提供的webpack.config.js文件是提供给webpack的,也就是说想要做更多的构建任务,对webpack配置文件进行修改即可。
webpack-dev-server支持两种模式的自动刷新。
1.iframe模式
使用iframe模式并不需要多余的配置,直接访问http://[host]:[port]/webpack-dev-server/[path]
即可,iframe模式的特征如下:
✦ 无需额外的配置
✦ 顶部条可以显示编译信息
✦ 浏览器的地址不会跟着页面URL变动
2.inline模式
简单配置可以开启,然后直接访问http://[host]:[port]/[path]
即可,inline模式的特征如下:
✦ 需要额外的配置
✦ 编译信息只能在命令行和浏览器console中查看
✦ 浏览器的地址和页面URL同步
实际操作
- 新建项目,在项目中,
- 安装 webpack
- 在项目中添加webpack.config.js配置文件,app文件夹,app文件夹下建一个index.js 和 sub.js
- 执行
npm init
初始化项目 - 安装 html-webpack-plugin、webpack-dev-server 插件
以下是文件的内容:
index.js
var sub = require('./sub');
var app = document.createElement('div');
app.innerHTML = '<h1>Hello World h1</h1>';
app.appendChild(sub());
document.body.appendChild(app);
sub.js
function generateText() {
var element = document.createElement('h2');
element.innerHTML = "Hello h2 world h2";
return element;
}
module.exports = generateText;
webpack.config.js
const path = require('path');
const HtmlwebpackPlugin = require('html-webpack-plugin');
const webpack = require('webpack');
//定义了一些文件夹的路径
const ROOT_PATH = path.resolve(__dirname);
const APP_PATH = path.resolve(ROOT_PATH, 'app');
const BUILD_PATH = path.resolve(ROOT_PATH, 'build');
module.exports = {
//项目的文件夹 可以直接用文件夹名称 默认会找index.js 也可以确定是哪个文件名字
entry: APP_PATH,
//输出的文件名 合并以后的js会命名为bundle.js
output: {
path: BUILD_PATH,
filename: 'bundle.js'//将app文件夹中的两个js文件合并成build目录下的bundle.js文件
},
//添加我们的插件 会自动生成一个html文件
plugins: [
new HtmlwebpackPlugin({
title: 'Hello World app'
}),//在build目录下自动生成index.html,指定其title
new webpack.HotModuleReplacementPlugin(),
],
devServer: {
historyApiFallback: true,
inline: true, //注意:不要写colors:true,progress:true等,webpack2.x已不支持这些
},
};
我们可以在 package.json 文件中自定义命令
"scripts": {
"start": "webpack-dev-server --inline"
},
我们文件写好后,我们直接执行 npm run start
,成功之后我们就可以访问我们的8080端口了。另外,我们还可以用一些其他插件或loader来处理一下我们的文件。
结束
- webpack-dev-server是一个模块化开发的解决方案,他封装了webpack,并作为一个简易的Node.js服务器供静态开发使用。虽然起步稍微复杂一些,但是环境搭好之后,无论对于新手还是老手,开发体验提升很大,对于工程化开发有很大的帮助。
- webpack-dev-server就是一个基于Node.js和webpack的一个简易服务器,它在服务器端进行构建打包。
- webpack-dev-server代码中注入了一份runtime,来建立webpack-dev-server和客户端的联系。
- webpack-dev-server和客户端建立联系之后,可以做很多厉害的事情,比如自动刷新、热替换等。
- webpack-dev-server还提供了代理功能,代理有很多应用场景,举几个简单的例子:本地数据接口模拟、远端接口调试、分拆接口到不同的远端服务器等。
- 实际项目中,我们可以使用代理来整合前端项目和后台项目,也可以使用两个项目并行的方式来整合,也就是直接建立前端项目和后段项目的联系。这个方案对于多页应用更具有通用性。
- webpack-dev-server还有一些自己的配置项。
参考文章:
http://blog.csdn.net/sinat_17775997/article/details/54374878
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。