资讯专栏INFORMATION COLUMN

roadhog 生产环境支持静态文件名加 hash 和 CDN 配置

番茄西红柿 / 540人阅读

摘要:问题来源于思路使用来给文件加使用插件来给文件加使用插件来自动根据加的来引入对应的和并生成文件安装无需安装因为已经带了版,如果自己安装了版反而可能出问题。

问题来源于:https://github.com/sorrycc/ro...

Workaround:

思路

使用 webpack output 来给 js 文件加 hash

使用插件 extract-text-webpack-plugin 来给 css 文件加 hash

使用插件 html-webpack-plugin 来自动根据
webpack 加的 hash 来引入对应的 css 和 js 并生成 html 文件

安装

npm i -D ejs-loader html-webpack-plugin webpack-md5-hash

无需安装 extract-text-webpack-plugin 因为 roadhog 已经带了 1.0.1 版,如果自己安装了 2.x 版反而可能出问题。需要额外安装 ejs-loader 因为 webpack 配置里会用到

webpack.config.js

const ExtractTextPlugin = require(extract-text-webpack-plugin)
const HtmlWebpackPlugin = require(html-webpack-plugin)
const WebpackMd5Hash = require(webpack-md5-hash)

module.exports = function (config, env) {
  config.module.loaders[0].exclude.push(/.ejs$/)    // 注 1
  if (env === production) {
    config.output.filename = [name].[chunkhash].js
    config.output.chunkFilename = [chunkhash].async.js
    config.plugins[3] = new ExtractTextPlugin([contenthash:20].css)    // 注 2
    config.plugins.push(
      new HtmlWebpackPlugin({
        template: ejs!src/index.ejs,    // 注 3
        inject: false,
        minify: { collapseWhitespace: true },
        production: true,
      }),
      new WebpackMd5Hash()
    )
  } else {
    config.plugins.push(
      new HtmlWebpackPlugin({
        template: ejs!src/index.ejs,
        inject: true,
      }),
    )
  }
  return config
}

[1] roadhog 默认配置把非 特定格式 的文件都用 url-loader 去加载,但是 html-webpack-plugin 需要的 ejs 文件会变成 base64 编码,所以要把 ejs 格式加入 loader 白名单,参考

[2] 覆盖 roadhog 的 配置

[3] roadhog 对 html 默认用的 file-loader,这里的 html-webpack-plugin 需要读取其内容作为模板,所以换成 ejs,也就不再需要 index.html

.roadhogrc

{
  "env": {
    "production": {
      "define": {
        "__CDN__": "https://cdn.example.com"
      }
    }
  }
}

.eslintrc

{
  "globals" : {
    "__CDN__": false
  }
}

index.ejs




  
  Example
  
  
  <% if (htmlWebpackPlugin.options.production) { %>
    <%= htmlWebpackPlugin.files.css.map((item) => {
      return ``
    }) %>
  <% } %>



  
<% if (htmlWebpackPlugin.options.production) { %> <%= htmlWebpackPlugin.files.js.map((item) => { return `` }) %> <% } %>

index.js 里去掉 `import ./index.html (如果有的话)

这样就同时兼顾了开发环境和部署环境使用同一套 html 入口,并且开发环境使用本地文件,部署环境使用按照文件内容 MD5 命名了的 CDN 文件(方便缓存控制)

参考

http://webpack.github.io/docs...

http://www.cnblogs.com/wonyun...

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

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

相关文章

  • roadhog 生产环境支持静态件名 hash CDN 配置

    摘要:问题来源于思路使用来给文件加使用插件来给文件加使用插件来自动根据加的来引入对应的和并生成文件安装无需安装因为已经带了版,如果自己安装了版反而可能出问题。 问题来源于:https://github.com/sorrycc/ro... Workaround: 思路 使用 webpack output 来给 js 文件加 hash 使用插件 extract-text-webpack-plu...

    jsummer 评论0 收藏0
  • roadhog 生产环境支持静态件名 hash CDN 配置

    摘要:问题来源于思路使用来给文件加使用插件来给文件加使用插件来自动根据加的来引入对应的和并生成文件安装无需安装因为已经带了版,如果自己安装了版反而可能出问题。 问题来源于:https://github.com/sorrycc/ro... Workaround: 思路 使用 webpack output 来给 js 文件加 hash 使用插件 extract-text-webpack-plu...

    izhuhaodev 评论0 收藏0
  • 如何使用webpack架构项目——新手教程

    摘要:博主最近在学习,顺便搭建了一个基于的前端项目架构在此写文记录一下,同时教会新入坑的小伙伴们如何在项目中玩弄,额玩转。所以开发环境中会有一个目录用于我们开发还有一个用来存储处理后的的模板文件。 博主最近在学习react redux,顺便搭建了一个基于webpack的前端项目架构,在此写文记录一下,同时教会新入webpack坑的小伙伴们如何在项目中玩弄,额!玩转webpack。github...

    sutaking 评论0 收藏0
  • 从零到一,新建webpack工程

    摘要:指定启用例如上述代码,就使用和处理了除了以外的。设置当前的为,同样这个配置也可以写在中。设置目录删除注释去除空格去除属性引号复制静态目录将所以可能被请求的静态文件,分别放在目录下。结语本次从零到一,新建了一个脚手架。 react-sample-javascript 为了实现一个可定制化高的react工程,我们往往会自己搭建一个react工程。所以本文会从零开始搭建一个react脚手架工...

    Code4App 评论0 收藏0
  • React+dva+webpack+antd-mobile 实战分享(一)

    摘要:再看本篇文章之前,本人还是建议想入坑的童鞋可以选有来创建的项目,因为现在和还不成熟,坑相对要多一些,当然如果你已经做好跳坑的准备,那么请继续往下走本文适合对有一定了解的人。 再看本篇文章之前,本人还是建议想入坑react的童鞋可以选有create-react-app来创建react的项目,因为现在dva和roadhog还不成熟,坑相对要多一些,当然如果你已经做好跳坑的准备,那么请继续往...

    ziwenxie 评论0 收藏0

发表评论

0条评论

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