作者回复: 1. 完全也推荐用 map 的写法,因为我们这个地方是一步到位讲解了通用的打包方案,如果有个中间演变方案,就比较容易理解为什么用 Object.keys 写法。比如: entry: { index: './src/index/index.js', search: './src/search/index' } 这个时候动态设置 html-webpack-plugin的数量是不是就需要先获取 keys? 这个情况的 entry 是一个 ojbect 就需要 object.keys 去获取了。由于此处是直接将最通用的方案,完全可以用 map 的写法。 2, 还有pageName中的匹配规则就是获取entry路径中的 ./src/ 开头和 /index.js 结尾中间的内容。也即页面的名字
作者回复: 更新文件缓存是生成的文件指纹去控制的,文件变化后,那么文件指纹会发生相应变化,就不会出现缓存还在的问题了。顺便说下通常的文件缓存策略: html: header 头的 cache-control 会设置成 no-cache。也就是 html 文件不会走缓存 css/js/img 等静态资源:header头的 cache-control 设置成强缓存,缓存时间通常是1年的样子。通过文件指纹控制缓存是否失效,文件指纹一变,请求就不会走旧文件了。
作者回复: html-webpack-plugin 里面有哥 chunks 字段,可以通过它指定需要嵌入进去的 chunks 的,比如(注意看chunks): htmlWebpackPlugins.push( new HtmlWebpackPlugin({ inlineSource: '.css$', template: path.join(__dirname, `src/${pageName}/index.html`), filename: `${pageName}.html`, chunks: [pageName], inject: true, minify: { html5: true, collapseWhitespace: true, preserveLineBreaks: false, minifyCSS: true, minifyJS: true, removeComments: false } }) ); });
作者回复: 哈哈,这里主要是如果 entry是 hard code的写法的话,那么entry是一个 object,例如: entry: { index: './src/index/index.js', search: './src/search/index.js' } 那么,我们获取动态设置 html-webpack-plugin 是不是需要通过 Object.keys 去获取key,主要是基于这点去考虑的哈。 由于我们这里直接演示了最通用的方案,一步到位,其实完全用 map 匹配没问题的,直接用 map 匹配即可。
作者回复: 此处的匹配规则是 src目录的子目录,并且这个子目录含有 index.js 入口文件。 我们把匹配的内容在src 和 index.js 之间,因此需要用 (.*)包裹起来获取
作者回复: 厉害了👍 这么爱学习
作者回复: glob模块主要就是文件的通配匹配能力比较强,你自己去实现一个类似的获取某个目录下的所有入口文件也是可以的。
作者回复: 是的,不过开发环境是增量构建的,只有发布阶段是全量构建。
作者回复: 这个主要是为了兼容异常的情况哈,比如这个正则如果返回的结果为 null,这个时候直接用 match[1]就报错了。 其实,日常编写的很多 JS 业务代码也需要进行相关变量存在与否的判断
作者回复: 可以贴一下你的 webpack 配置吗?我帮你看看哈。 另外你可以把 entry 用 console.log 打印出来看看