We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
DevServer 会启动一个 HTTP 服务器用于服务网页请求,同时会帮助启动 Webpack ,并接收 Webpack 发出的文件更变信号,通过 WebSocket 协议自动刷新网页做到实时预览。
首先需要安装 DevServer:
npm i webpack-dev-server -D
DevServer 会把 Webpack 构建出的文件保存在内存中。
如果你有单独的后端开发服务器 API,并且希望在同域名下发送 API 请求 ,那么代理某些 URL 会很有用。dev-server 使用了非常强大的 http-proxy-middleware 包。常用于接口请求转发。具体参考https://www.webpackjs.com/configuration/dev-server/#devserver-proxy
devServer: { contentBase: "./dist", open: true, hot: true, hotOnly: true, proxy: { "/api": { target: "https://other-server.example.com", pathRewrite: {"^/api" : ""}, secure: false, bypass: function(req, res, proxyOptions) { if (req.headers.accept.indexOf("html") !== -1) { console.log("Skipping proxy for browser request."); return "/index.html"; } } } } },
webpack-dev-middleware 是一个容器(wrapper),它可以把 webpack 处理后的文件传递给一个服务器(server)。 webpack-dev-server 在内部使用了它,同时,它也可以作为一个单独的包来使用,以便进行更多自定义设置来实现更多的需求
// server.js // 使用webpack-dev-middleware // https://www.webpackjs.com/guides/development/#%E4%BD%BF%E7%94%A8-webpack-dev-middleware const express = require("express"); const webpack = require("webpack"); const webpackDevMiddleware = require("webpack-dev-middleware"); const config = require("./webpack.config.js"); const complier = webpack(config); const app = express(); app.use( webpackDevMiddleware(complier, { publicPath: config.output.publicPath }) ); app.listen(3000, () => { console.log("server is running"); });
当使用 HTML5 History API 时,任意的 404 响应都可能需要被替代为 index.html 通过传入以下启用:
historyApiFallback: true;
复制代码通过传入一个对象,比如使用 rewrites 这个选项,此行为可进一步地控制:
historyApiFallback: { rewrites: [ { from: /^\/$/, to: "/views/landing.html" }, { from: /^\/subpage/, to: "/views/subpage.html" }, { from: /./, to: "/views/404.html" } ]; }
模块热替换(Hot Module Replacement 或 HMR)是 webpack 提供的最有用的功能之一。它允许在运行时更新各种模块,而无需进行完全刷新。
webpack.config.js
const webpack = require('webpack'); devServer: { contentBase: './dist', open: true, hot: true, hotOnly: true }, plugins: [ ... new webpack.HotModuleReplacementPlugin() ],
如果已经通过 HotModuleReplacementPlugin 启用了模块热替换(Hot Module Replacement),则它的接口将被暴露在 module.hot 属性下面。通常,用户先要检查这个接口是否可访问,然后再开始使用它。
index.js
// index.js if (module.hot) { module.hot.accept("./library.js", function() { // 使用更新过的 library 模块执行某些操作... }); }
借助一些官方推荐的可视化分析工具,可对打包后的模块进行分析以及优化
prefetch:会等待核心代码加载完成后,页面带宽空闲后再去加载 prefectch 对应的文件;preload:和主文件一起去加载
webpack 编译器(compiler)能够识别遵循 ES2015 模块语法、CommonJS 或 AMD 规范编写的模块。然而,一些第三方的库(library)可能会引用一些全局依赖(例如 jQuery 中的 $)。这些库也可能创建一些需要被导出的全局变量。这些“不符合规范的模块”就是 shimming 发挥作用的地方
const webpack = require("webpack"); module.exports = { plugins: [ new webpack.ProvidePlugin({ _: "lodash", }), ], };
module.exports = { module: { rules: [ { test: require.resolve("index.js"), use: "imports-loader?this=>window", }, ], }, plugins: [ new webpack.ProvidePlugin({ join: ["join"], }), ], };
在配置 Webpack 时,需要区分用于开发模式还是生产模式。比如我们只需要在生产模式时压缩 CSS;而在开发模式的时候,我们又希望生成 source map 便于调试,以及样式热更新。
详细可以看这篇文章,说的非常细致全面了:Webpack 设置环境变量的误区。
The text was updated successfully, but these errors were encountered:
No branches or pull requests
webpack-dev-server
DevServer 会启动一个 HTTP 服务器用于服务网页请求,同时会帮助启动 Webpack ,并接收 Webpack 发出的文件更变信号,通过 WebSocket 协议自动刷新网页做到实时预览。
首先需要安装 DevServer:
DevServer 会把 Webpack 构建出的文件保存在内存中。
接口代理(请求转发)
webpack-dev-middleware
webpack-dev-middleware 是一个容器(wrapper),它可以把 webpack 处理后的文件传递给一个服务器(server)。 webpack-dev-server 在内部使用了它,同时,它也可以作为一个单独的包来使用,以便进行更多自定义设置来实现更多的需求
解决单页面路由问题
当使用 HTML5 History API 时,任意的 404 响应都可能需要被替代为 index.html
通过传入以下启用:
复制代码通过传入一个对象,比如使用 rewrites 这个选项,此行为可进一步地控制:
Hot Module Replacement
模块热替换(Hot Module Replacement 或 HMR)是 webpack 提供的最有用的功能之一。它允许在运行时更新各种模块,而无需进行完全刷新。
webpack.config.js
如果已经通过 HotModuleReplacementPlugin 启用了模块热替换(Hot Module Replacement),则它的接口将被暴露在 module.hot 属性下面。通常,用户先要检查这个接口是否可访问,然后再开始使用它。
index.js
bundle 分析
Preloading、Prefetching
Shimming
环境变量
详细可以看这篇文章,说的非常细致全面了:Webpack 设置环境变量的误区。
参考文档
The text was updated successfully, but these errors were encountered: