资讯专栏INFORMATION COLUMN

进击webpack4 (基础篇三:配置 二)

sourcenode / 1145人阅读

摘要:多页面配置进击基础篇一进击基础篇二配置多页面配置多页面配置即是多入口需要写成对象形式,注意数组形式会变成多入口单页面,因为打包之后的会合并成一个入口文件出口不能写同一个文件用代替以上配置并不能多页面,还需要个模板,并且指明各自的代码块去生成

多页面配置

进击webpack 4 (基础篇一)

进击webpack4 (基础篇二:配置)

## 多页面配置 ##

多页面配置即是多入口

entry需要写成对象形式, 注意数组形式会变成多入口单页面, 因为打包之后的chunks 会合并成一个!

</>复制代码

  1. //webpack.config.js
  2. entry:{
  3. home:["@babel/polyfill","./src/index.js"],
  4. login:["@babel/polyfill","./src/login.js"]
  5. }, // 入口文件

出口不能写同一个文件 用[name]代替

</>复制代码

  1. output:{
  2. filename:"[name].js",
  3. path:path.resolve(__dirname,"./dist")
  4. }

以上配置并不能多页面, 还需要2个html模板,并且指明各自的chunks(代码块)

</>复制代码

  1. plugins: [
  2. // new PluginName 去生成js对象供给 webpack compiler 调用
  3. new HtmlWebpackPlugin({
  4. template:"./index.html",
  5. filename:"index.html",
  6. chunks:["home"]
  7. }),
  8. new HtmlWebpackPlugin({
  9. template:"./login.html",
  10. filename:"login.html",
  11. chunks:["login"]
  12. }),
  13. ],

否则每个页面会同时引入所有的js

devtools

在production下 打包后的代码都被压缩掉了,我们有时候需要调试代码的时候没法定位,devtools就是干这件事的

它有7种类型基本类型
eval: 每个module会封装到 eval 里包裹起来执行,并且会在末尾追加注释 //@ sourceURL.
source-map: 生成一个SourceMap文件.
hidden-source-map: 和 source-map 一样,但不会在 bundle 末尾追加注释.
inline-source-map: 生成一个 DataUrl 形式的 SourceMap 文件.
eval-source-map: 每个module会通过eval()来执行,并且生成一个DataUrl形式的SourceMap.
cheap-source-map: 生成一个没有列信息(column-mappings)的SourceMaps文件,不包含loader的 sourcemap(譬如 babel 的 sourcemap)
cheap-module-source-map: 生成一个没有列信息(column-mappings)的SourceMaps文件,同时 loader 的 sourcemap 也被简化为只包含对应行的。

我们常用的是source-map

</>复制代码

  1. devtools:"source-map"

watch

</>复制代码

  1. watch:true,
  2. watchOptions:{
  3. poll:5 // 每秒问5次要不要打包
  4. }

可以实时监控打包 每当代码变化就重新打包

其他的一些plugin

clean-webpack-plugin

每次打包之前清空原来的文件夹

</>复制代码

  1. yarn add clean-webpack-plugin -D

</>复制代码

  1. const cleanWebpackPlugin = require("clean-webpack-plugin")
  2. plugins: [
  3. // new PluginName 去生成js对象供给 webpack compiler 调用
  4. new cleanWebpackPlugin("./dist") // 指定需要清空的目录
  5. ],

copy-webpack-plugin

用于文件的拷贝

</>复制代码

  1. yarn add copy-webpack-plugin -D

</>复制代码

  1. const copyWebpackPlugin= require("copy-webpack-plugin")
  2. plugins: [
  3. // new PluginName 去生成js对象供给 webpack compiler 调用
  4. new copyWebpackPlugin({
  5. from:"xxx",
  6. to:"./" // 在dist里
  7. }) // 指定从哪里拷贝到哪里
  8. ],

- webpack 可视化工具

</>复制代码

  1. yarn add webpack-bundle-analyzer -D

</>复制代码

  1. const BundleAnalyzerPlugin = require("webpack-bundle-analyzer").BundleAnalyzerPlugin;
  2. plugins: [
  3. new BundleAnalyzerPlugin ()
  4. ]

跨域代理配置

</>复制代码

  1. devServer:{
  2. proxy:{
  3. "/api":{
  4. target:"www.baidu.com",
  5. pathReWrite:{"/api":""}, // 请求/api的url /api 会替换成"" ,并且自动加前缀target
  6. secure: false, // 接受运行在 HTTPS 上,使用了无效证书的后端服务器
  7. changeOrigin: true, //虚拟一个服务器接收你的请求并代你发送该请求,
  8. }
  9. },
  10. contentBase: "./dist", //当前服务以哪个作为静态资源路径
  11. host:"localhost", // 主机名 默认是localhost
  12. port:3000, // 端口配置
  13. open:true, // 是否自动打开网页
  14. compress:true // 是否精简
  15. }

如需多个代理, 多配制几个proxy的key值就ok

resolve

</>复制代码

  1. resolve:{
  2. modules:[path.resolve("node_modules")], // 数组 可以配置多个 强制指定寻找第三方模块的目录 使得查找更快
  3. alias:{ //别名配置 import xxx from "src/xxx" ---> import xxx from "@/xxx"
  4. "@":path.resolve(__dirname,"./src")
  5. },
  6. extensions:[".css",".js",".json",".jsx"] // 自动添加后缀 加载模块时候依次添加后缀 直到找到为止
  7. }
设置开发或者生产环境

webpack自带插件webpack.definePlugin, 可以定义全局变量

</>复制代码

  1. webpack.definePlugin({
  2. Dev:""development"", // 注意双引号里面套的是单引号的字符串
  3. Pro:""production"" // if(Dev==="development"){}else{//.....} 这样在其他环境中使用定义不同接口地址
  4. })

配置篇完

下一节 webpack 优化

对于没有其他依赖的第三方库, 不解析

webpack内置插件ignorePlugin 的使用

动态链接库

多核并发打包

webpack的tree-shaking跟scope-hosting

公共js代码的提取

懒加载

热更新

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/102115.html

相关文章

  • 进击webpack4 (优化篇)

    摘要:进击基础篇一进击基础篇二配置一进击基础篇三配置二不解析不依赖第三方模块的模块有一些第三方模块,它本身不依赖于其他模块,比如,,不去编译这些库,会使得打包更加快速是个正则或者包含正则的数组不去解析忽略 进击webpack 4 (基础篇一)进击webpack4 (基础篇二:配置 一)进击webpack4 (基础篇三:配置 二) 不解析不依赖第三方模块的模块 noParse 有一些第三方模块...

    isaced 评论0 收藏0
  • 进击webpack4基础篇:配置 一)

    摘要:进入入口起点后,会找出有哪些模块和库是入口起点直接和间接依赖的。用于对模块的源代码进行转换。指定生产还是开发入口文件打包后的文件名这里需指定一个绝对路径我们需要的模块去解析路径包含一系列的规则是一个具有属性的对象。 前文:进击webpack 4 (基础篇 一) webpack.config.js基础配置 webpack 有4大概念 入口(entry) 输出(output) load...

    FleyX 评论0 收藏0
  • 进击的 JavaScript() 之 数据结构

    摘要:的垃圾回收器,进行回收。它们的数据就存放在堆内存中,大小不一定,动态分配内存,可随时修改。引用类型的变量存的是其在堆内存中的地址,值的读取,就是读取这个内存地址中储存的内容。 这东西还是很重要的,你要是搞懂了,就会去除很多困惑,比如不知道大家在学习js 的时候,有没有对 基础类型 和 引用类型 感到困惑过,两者之间 表现的不同之处。 js 不同其他编程语言,它是脚本语言。所以,它的数...

    BlackFlagBin 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<