前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >3-8 使用 WebpackdevServer 提升开发效率

3-8 使用 WebpackdevServer 提升开发效率

作者头像
love丁酥酥
发布2020-02-19 10:40:12
5930
发布2020-02-19 10:40:12
举报
文章被收录于专栏:coding for lovecoding for love

1. 简介

webpack-dev-server 是 webpack 集成的开发者服务器,用于帮助开发者快速开发应用程序。

2. 如何展示页面

我们来回顾一下,之前是如何展示页面的。我用的是 webstorm,点击 html 文件右上角

image.png

即可打开网页,当然也可以直接将 html 文件拖到浏览器,也会为我们打开。这两种方式有什么不同呢?

  1. 直接将文件拖到浏览器,使用的是 file 协议

image.png

  1. 使用 webstorm 的浏览器标签打开,使用的是 http 协议

image.png 简单来讲,File 协议主要用于访问本地计算机中的文件,就如同在Windows资源管理器中打开文件一样,而 http 协议是超文本传输协议,指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。目前这两种方案都是 okay 的,但是我们的网页文件开发出来一般肯定是放在网上供其他用户浏览的,另外,file 协议也会遇到跨域问题,所以开发时应该使用 http 协议。 webstorm 实际上就是为我们开了一个本地服务器用来存放网页文件,如果大家不使用 webstorm,也可以使用其他 ide 的该功能,或者使用 http-server,apache 等帮助实现一个本地服务器。这里就不细述了。

3. 频繁编译和刷新

我们编写代码以后如果想要更新网页内容,需要在编写代码后,需要重新运行一遍打包命令,然后刷新网页,才能看到新增的代码生效。可以尝试以下,将 sidebar.js 中的 sidebar 改为 sidebar2,可以看到重新编译,然后刷新网页后生效。

代码语言:javascript
复制
// sidebar.js
export default function Sidebar() {
    var dom = document.getElementById('root');
    var sidebar = document.createElement('div');
    sidebar.innerText = 'sidebar2';
    dom.appendChild(sidebar);
}

image.png

这无疑是影响开发效率的。有没有办法能让我们对代码的修改能及时显示到网页上呢?

4. watch

我们在 build 命令后加一个参数,--watch,如下:

代码语言:javascript
复制
  "scripts": {
    "build": "webpack --watch"
  },

重新运行编译命令,然后修改 sidebar2 为 sidebar 3,此时直接刷新网页,发现内容已经更新。说明我们修改源文件后,webpack 自动帮我们做了编译。 事实上,启用 Watch 模式。意味着在初始构建之后,webpack 将继续监听任何已解析文件的更改。Watch 模式默认关闭。 开启 watch 模式的另一种方法是在 webpack.config.js 配置。

代码语言:javascript
复制
  watch: true

或者使用 watchOptions 进行更多的监听配置。

5. webpack-dev-server

上面我们已经讲到了,html 文件应该展示在服务器上。使用 watch 能够帮助我们监听文件的变动从而自动编译,但是我们仍然要手动刷新压面才能展示新的内容,因为服务器是 ide 帮我们建立的,那么 webpack 是否能帮助我们建立服务器,并且提供一些配置,比如自动刷新呢,答案是有的。 添加如下配置:

代码语言:javascript
复制
// webpack.config.js
    devServer: {
        contentBase: path.resolve(__dirname, 'dist')
    },
代码语言:javascript
复制
// package.json
  "scripts": {
    "build": "webpack",
    "start": "webpack-dev-server"
  },

运行命令 npm i webpack-dev-server -D 下载该模块。 然后运行命令 npm start,如下:

image.png

打开 http://localhost:8080/,可以看到:

image.png

修改 sidebar 内容后,切到网页,发现内容已经自动刷新:

image.png

其实,devServr 还为我们提供了很多配置选项来满足开发者的需求,打开webpack-dev-server可以查看这些配置的使用方法。举几个简单的例子如下:

代码语言:javascript
复制
// webpack.config.js
    devServer: {
        contentBase: path.resolve(__dirname, 'dist'),
        open: true,
        port: 3000
    },

运行 npm start 后,浏览器自动为我们打开页面:

image.png

6. 使用 webpack-dev-middleware

其实,早起的一些项目中,大家肯能会看见并没有使用 devServer 这个配置项来开启配置服务器,而是开发者新增一个 server.js 文件来实现这个服务器。这是由于早期 devServer 的功能还不稳定,配置项也不丰富,但是现在大部分情况下这个配置已经可以满足了,如果大家想要定制化服务器,也可以手撸一个并借助webpack-dev-middleware 来使用。 webpack-dev-middleware 是一个容器(wrapper),它可以把 webpack 处理后的文件传递给一个服务器(server)。 webpack-dev-server 在内部使用了它,同时,它也可以作为一个单独的包来使用,以便进行更多自定义设置来实现更多的需求。 我们利用 express 来实现服务器。首先,安装 express 和 webpack-dev-middleware::

代码语言:javascript
复制
npm i -D express webpack-dev-middleware

在 webpack.config.js 的同级目录添加一个文件 server.js

代码语言:javascript
复制
const express = require('express');
const webpack = require('webpack');
const webpackDevMiddleware = require('webpack-dev-middleware');

const app = express();
const config = require('./webpack.config.js');
const compiler = webpack(config);

// Tell express to use the webpack-dev-middleware and use the webpack.config.js
// configuration file as a base.
app.use(webpackDevMiddleware(compiler, {
  publicPath: config.output.publicPath
}));

// Serve the files on port 3000.
app.listen(3000, function () {
  console.log('Example app listening on port 3000!\n');
});

在 scripts 新增一个脚本:

代码语言:javascript
复制
  "scripts": {
    "build": "webpack",
    "start": "webpack-dev-server",
    "server": "node server.js"
  },

运行脚本,npm run server。 打开 http://localhost:3000/ 即可看见网页内容。修改内容后会自动编译,刷新页面后页面内容更新。如果要实现上述 devServer 的其他配置项支持,我们就需要不断完善这个 server.js 的功能。 关于 上述代码中的 webpack 和 compiler 可以点击 webpack-node-api 查看详细内容。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 简介
  • 2. 如何展示页面
  • 3. 频繁编译和刷新
  • 4. watch
  • 5. webpack-dev-server
  • 6. 使用 webpack-dev-middleware
相关产品与服务
云服务器
云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档