webpack 开发模式管理 Development

GitHub 学习 Demo。

接下来将一些开发时的 webpack 配置。

warnning : 本指南中的工具仅用于开发,请避免在生产中使用它们!

先把 mode 属性变为 development.

# webpack.config.jsconst path = require('path');const HtmlWebpackPlugin = require('html-webpack-plugin');const CleanWebpackPlugin = require('clean-webpack-plugin');module.exports = {
+   mode: 'development',entry: {app: './src/index.js',print: './src/print.js'},plugins: [new CleanWebpackPlugin(['dist']),new HtmlWebpackPlugin({title: 'Development'})],output: {filename: '[name].bundle.js',path: path.resolve(__dirname, 'dist')}};
复制代码

使用 source maps

当webpack捆绑您的源代码时,很难找到错误和警告到其原始位置。因为此时错误都是从 bundle.js 里抛出的,而这是一个经过编译的文件。。。

JavaScript 提供 source maps ,能将编译后的代码映射回原始源代码。 如果错误源自b.js,源地图将准确地告诉您。

这里选用 devtool: 'inline-source-map' 选项达到这一目的。关于 devtool 的更多选项及其功能,请点链接阅读。

# webpack.config.jsconst path = require('path');const HtmlWebpackPlugin = require('html-webpack-plugin');const CleanWebpackPlugin = require('clean-webpack-plugin');module.exports = {mode: 'development',entry: {app: './src/index.js',print: './src/print.js'},
+   devtool: 'inline-source-map',plugins: [new CleanWebpackPlugin(['dist']),new HtmlWebpackPlugin({title: 'Development'})],output: {filename: '[name].bundle.js',path: path.resolve(__dirname, 'dist')}};# src/print.js
# 写一段错误语法的代码export default function printMe() {
-   console.log('I get called from print.js!');
+   cosnole.log('I get called from print.js!');}
复制代码

编译后回发现报错:

Uncaught ReferenceError: cosnole is not definedat HTMLButtonElement.printMe (print.js:2)
复制代码

选择一个 Development Tool

现在的程序,每次需要查看新的结果,都要重新编译一次,非常的麻烦。
有几种方法可以实现,你代码发生变化时,自动从新编译:

  • wepback 的 Watch Mode (观察模式)
  • webpack-dev-server
  • webpack-dev-middleware

大多数情况下都会选用 webpack-dev-server。但接下来每个都会讲到。

Watch Mode

使用 webpack 的命令行选项 --watch 实现。
添加一段 npm script :

  {"name": "development","version": "1.0.0","description": "","main": "webpack.config.js","scripts": {"test": "echo \"Error: no test specified\" && exit 1",
+     "watch": "webpack --watch","build": "webpack"},"keywords": [],"author": "","license": "ISC","devDependencies": {"clean-webpack-plugin": "^0.1.16","css-loader": "^0.28.4","csv-loader": "^2.1.1","file-loader": "^0.11.2","html-webpack-plugin": "^2.29.0","style-loader": "^0.18.2","webpack": "^3.0.0","xml-loader": "^1.2.1"}}
复制代码

现在从命令行运行npm run watch,看看webpack如何编译你的代码。 您可以看到它不会退出命令行,因为脚本当前正在查看您的文件。

此时当你保存代码修改的时候,就会促发重新编译。

但这个功能的缺点就是,该功能仅是监听到代码变化后重新编译,但浏览器不会自定更新变化。webpack-dev-server 可以解决这个问题。

webpack-dev-server

webpack-dev-server为您提供了一个简单的Web服务器,并能够使用实时重新加载。 我们来设置一下:

依赖
npm install --save-dev webpack-dev-server
复制代码
修改配置
# webpack.config.jsconst path = require('path');const HtmlWebpackPlugin = require('html-webpack-plugin');const CleanWebpackPlugin = require('clean-webpack-plugin');module.exports = {mode: 'development',entry: {app: './src/index.js',print: './src/print.js'},devtool: 'inline-source-map',
+   devServer: {
+     contentBase: './dist'
+   },plugins: [new CleanWebpackPlugin(['dist']),new HtmlWebpackPlugin({title: 'Development'})],output: {filename: '[name].bundle.js',path: path.resolve(__dirname, 'dist')}};
复制代码

tips :
webpack-dev-server在编译后不会写任何输出文件。 相反,它将捆绑文件保存在内存中并为它们提供服务,就好像它们是安装在服务器根路径上的真实文件一样。

如果您的页面希望在不同的路径中找到捆绑包文件,则可以使用dev服务器配置中的publicPath选项进行更改。

修改 npm script
# package.json{"name": "development","version": "1.0.0","description": "","main": "webpack.config.js","scripts": {"test": "echo \"Error: no test specified\" && exit 1","watch": "webpack --watch",
+     "start": "webpack-dev-server --open","build": "webpack"},"keywords": [],"author": "","license": "ISC","devDependencies": {"clean-webpack-plugin": "^0.1.16","css-loader": "^0.28.4","csv-loader": "^2.1.1","file-loader": "^0.11.2","html-webpack-plugin": "^2.29.0","style-loader": "^0.18.2","webpack": "^3.0.0","xml-loader": "^1.2.1"}}
复制代码

现在我们可以从命令行运行npm start,我们将看到我们的浏览器自动加载我们的页面。 如果您现在更改任何源文件并保存它们,Web 服务器将在编译代码后自动重新加载。

关于 webpack-dev-server 的更多选项。

webpack-dev-middleware

webpack-dev-middleware是一个包装器,它将 webpack 处理的文件发送到服务器。 这在webpack-dev-server内部使用,但是它可以作为单独的包提供,以便在需要时允许更多自定义设置。 我们将看一个将webpack-dev-middlewareexpress server服务器相结合的示例。

安装依赖
npm install --save-dev express webpack-dev-middleware
复制代码
修改配置

现在我们需要对webpack配置文件进行一些调整,以确保中间件能够正常运行:

# webpack.config.jsconst path = require('path');const HtmlWebpackPlugin = require('html-webpack-plugin');const CleanWebpackPlugin = require('clean-webpack-plugin');module.exports = {mode: 'development',entry: {app: './src/index.js',print: './src/print.js'},devtool: 'inline-source-map',devServer: {contentBase: './dist'},plugins: [new CleanWebpackPlugin(['dist']),new HtmlWebpackPlugin({title: 'Output Management'})],output: {filename: '[name].bundle.js',path: path.resolve(__dirname, 'dist'),
+     publicPath: '/'}};
复制代码

publicPath 将在我们的服务器脚本中使用,以确保在http:// localhost:3000上正确提供文件。 我们稍后会指定端口号。 下一步是设置我们的自定义express server服务器:

创建 server
  webpack-demo|- package.json|- webpack.config.js
+ |- server.js|- /dist|- /src|- index.js|- print.js|- /node_modules# server.jsconst 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');
});
复制代码
现在添加一个npm script,使其更容易运行服务器:
# package.json{"name": "development","version": "1.0.0","description": "","main": "webpack.config.js","scripts": {"test": "echo \"Error: no test specified\" && exit 1","watch": "webpack --watch","start": "webpack-dev-server --open",
+     "server": "node server.js","build": "webpack"},"keywords": [],"author": "","license": "ISC","devDependencies": {"clean-webpack-plugin": "^0.1.16","css-loader": "^0.28.4","csv-loader": "^2.1.1","express": "^4.15.3","file-loader": "^0.11.2","html-webpack-plugin": "^2.29.0","style-loader": "^0.18.2","webpack": "^3.0.0","webpack-dev-middleware": "^1.12.0","xml-loader": "^1.2.1"}}
复制代码

运行 npm run server,浏览器打开 http:// localhost:3000。 您应该看到您的webpack应用程序正在运行并运行!

但是,你会发现更新代码时只会重新编译。如果需要热更新功能需要自己配置你得服务器脚本。

这种自定义开发服务器的方式非常灵活,但需要你具备一定的 node.js 基础。

NEXT

既然您已经学会了如何自动编译代码并运行一个简单的开发服务器,下一步就来认识 Hot Module Replacement 热模块切换。

转载于:https://juejin.im/post/5c8e55dbe51d4554d153f5c2

webpack 开发模式管理 Development相关推荐

  1. 使用Git子模块和开发模式管理Python项目

    目录 挑战 什么是开发模式? 什么是Git子模块? 设置项目 设置commonlib的Git存储库 设置myproj的Git存储库 设置Git子模块 将存储库添加为子模块 更新子模块 使用Git子模块 ...

  2. webpack初体验_使用webpack打包js文件_json文件_使用webpack开发模式_生产模式打包---webpack工作笔记003

    我们首先去初始化一下npm npm init 然后package name 输入webpack_test 然后初始化npm以后,我们去 安装npm i webpack webpack-cli -g 全 ...

  3. Webpack项目学习:开始搭建和react-cli(脚手架)-开发模式配置

    配置配置配置文件 初始化包 npm init -y >5个核心概念 // 入口entry: "./src/main.js",// 相对路径和绝对路径都行 由于运行是在外面运行 ...

  4. webpack+react+redux+es6开发模式---续

    一.前言 之前介绍了webpack+react+redux+es6开发模式 ,这个项目对于一个独立的功能节点来说是没有问题的.假如伴随着源源不断的需求,前段项目会涌现出更多的功能节点,需要独立部署运行 ...

  5. 面对 ESM 的开发模式,webpack 还有还手之力吗?(转载)

    snowpack / vite 等基于 ESM 的构建工具出现,让项目的工程构建不再需要构建一个完整的 bundle.很多人都觉得我们不再需要打包工具的时代即将到来.借助浏览器 ESM 的能力,一些代 ...

  6. Webpack学习:使用开发模式-处理 Styl 资源

    安装 前面已经安装好了 npm i stylus-loader -D 配置 {test: /\.styl$/,use: ["style-loader", "css-loa ...

  7. webpack+react+redux+es6开发模式

    一.预备知识 node, npm, react, redux, es6, webpack 二.学习资源 ECMAScript 6入门 React和Redux的连接react-redux Redux 入 ...

  8. webpack+react+es6开发模式

    一.前言 实习了两个月,把在公司用到的前端开发模式做个简单的整理.公司里前端开发模式webpack+react+redux+es6,这里去掉了redux. webpack, react, redux等 ...

  9. 54:第五章:开发admin管理服务:7:人脸入库流程;人脸登录流程;浏览器开启视频调试模式(以便能够在本机的不安全域名的情况下,也能去开启摄像头);

    说明: (1)本篇博客内容:介绍人脸入库流程,人脸登录流程:人脸入库流程:Chrome开启视频调试模式,以便能够在本机的不安全域名的情况下,也能去开启摄像头: 目录 一:人脸入库流程,人脸登录流程: ...

最新文章

  1. 如何记录2秒内实现1800度转体+翻腾,百度智能云黑科技教你看懂跳水
  2. 机器学习Basics-第九期-CNN卷积神经网络详解
  3. python语言支持函数式编程_python是函数式语言么
  4. hibernate.cfg.xml 配置(摘录)
  5. mysql 导入json_JsonToMysql(json导入mysql数据库工具)
  6. 无语!Docker桌面不再对企业用户免费
  7. Java解决Hash(散列)冲突的四种方法--开放地址法(线性探测,二次探测,伪随机探测)、链地址法、再哈希、建立公共溢出区
  8. 芯片14纳米与7纳米相比,是不是芯片大一点,性能差不太多呢?
  9. jdbc代码_Mysql Java 驱动代码阅读笔记及 JDBC 规范笔记
  10. hdu-3790 最短路径问题---dijkstra两重权值
  11. usboot应用两篇:用USBOOT修理移动硬盘等
  12. html中怎么隐藏一些符号,html 的一些特殊符号
  13. 小姜的perl学习笔记
  14. DM数据库windwos和linux环境单机安装部署
  15. 网站流量UV是什么意思?什么是流量UV?
  16. 只需1招,让对账效率马上翻6倍,正航助力企业账款快速回笼
  17. “借给别人5000块,我就能一口口吃掉他一套房,打官司也告不倒我!”
  18. 【ACWing】1064. 小国王
  19. 腾讯种的黄瓜番茄你吃过吗?
  20. GoogLeNet神经网络

热门文章

  1. jsp验证身份证号并自动计算年龄和出生日期
  2. request 和response
  3. lamp平台的搭建:mysql的编译安装【转】
  4. h.264码流解析_一个SPS的nalu及获取视频的分辨率
  5. easyUI实现tabs形式
  6. 【算法学习笔记】08.数据结构基础 二叉树初步练习1
  7. 开发标准化软件组件能让程序员在大城市过上体面的生活 -- 多系统用户权限管理标准件开发销售心得体会...
  8. 以可读写可追加的方式显示系统时间
  9. 推荐 正则表达式入门教程
  10. Loadrunner11如何使用非IE浏览器录制脚本