HtmlWebpackPlugin用的html的ejs模板文件中如何使用條件判斷


折騰:

【已解決】給react-hot-boilerplate中的index.html換成用HtmlWebpackPlugin自動生成html

期間,已經有了思路了,但是不知道如何在ejs的html中寫條件判斷

想要實現類似於這樣的效果:

    <% if htmlWebpackPlugin.options.isProdEnv %>
    <link rel=”stylesheet” href=”assets/lib/bootstrap/bootstrap.min.css”>
    <% else %>
    <link rel=”stylesheet” href=”http://localhost:4000/assets/lib/bootstrap/bootstrap.min.css”>
    <% endif %>

htmlwebpackplugin ejs template

html-webpack-plugin/default_index.ejs at master · jantimon/html-webpack-plugin

is it possible for html-webpack-plugin to output an ejs file? · Issue #551 · jantimon/html-webpack-plugin

Use html-webpack-plugin with an EJS file or stop webpack from evaluating variables · Issue #664 · jantimon/html-webpack-plugin

nesting templates using ejs · Issue #443 · jantimon/html-webpack-plugin

javascript – EJS Template for webpack plugin ‘html-webpack-plugin’ – Stack Overflow

webpack html (ejs) include other templates – Stack Overflow

沒有找到要的。

參考:

webpack – Use HTMLWebpackPlugin with an EJS file – Stack Overflow

倒是可以考慮,根據市dev還是prod去傳入的參數,就是link的href添加的前綴

也是可以的。

tracker1/ejs-render-loader: EJS loader for webpack (without frontend dependencies)

mde/ejs: Embedded JavaScript templates — http://ejs.co

支持if:

<% if (user) { %>
  <h2><%= user.name %></h2>
<% } %>

但是好像沒有if else

‎ejs.co

此處,參考官網代碼:

在webpack.config.js中添加了配置:

  new HtmlWebpackPlugin({
    template: ‘./src/index.template.ejs’,
    // minify: { collapseWhitespace: true },
    filename: ‘index.html’,
    // inject: true,
    hash: true,
    isProdEnv: isProd
  }),

的情況下,index.template.ejs中寫上:

    <% if (htmlWebpackPlugin.options.isProdEnv) { %>
      <link rel=”stylesheet” href=”assets/lib/bootstrap/bootstrap.min.css”>
    <% } %>
 
    <% if (!htmlWebpackPlugin.options.isProdEnv) { %>
      <link rel=”stylesheet” href=”http://localhost:4000/assets/lib/bootstrap/bootstrap.min.css”>
    <% } %>

是可以在htmlWebpackPlugin.options.isProdEnv為true,生成:

      <link rel=”stylesheet” href=”assets/lib/bootstrap/bootstrap.min.css”>

在:htmlWebpackPlugin.options.isProdEnv為false,生成:

      <link rel=”stylesheet” href=”http://localhost:4000/assets/lib/bootstrap/bootstrap.min.css”>

的。

當然,其實此處,更好的做法是:

直接傳入,此處的href中的地址,需要添加的前綴,就可以了。

然后改為:

let wdsListenPort = 4000;
 
  new HtmlWebpackPlugin({
    template: ‘./src/index.template.ejs’,
    // minify: { collapseWhitespace: true },
    filename: ‘index.html’,
    // inject: true,
    hash: true,
    assetsPrefix: isProd ? ” : `http://localhost:${wdsListenPort}/`
  }),

    <link rel=”stylesheet” href=”<%= htmlWebpackPlugin.options.assetsPrefix %>assets/lib/bootstrap/bootstrap.min.css”>

npm run build,為production時,即可輸出:

    <link rel=”stylesheet” href=”assets/lib/bootstrap/bootstrap.min.css”>

【總結】

此處用如下方式,實現了想要的效果:

當是開發環境時,從ejs模板生成的html中href的css,js都是:http://localhost:4000/assetsxxx的地址,

當是生產環境時,從ejs模板生成的html中href的css,js都是:assets/xxx的地址,

webpack.config.js

var HtmlWebpackPlugin = require(‘html-webpack-plugin’);
 
let isProd = (process.env.NODE_ENV === ‘production’);
 
let wdsListenPort = 4000;
 
  new HtmlWebpackPlugin({
    template: ‘./src/index.template.ejs’,
    // minify: { collapseWhitespace: true },
    filename: ‘index.html’,
    // inject: true,
    hash: true,
    assetsPrefix: isProd ? ” : `http://localhost:${wdsListenPort}/`
  }),

src/index.template.ejs

    <link rel=”stylesheet” href=”<%= htmlWebpackPlugin.options.assetsPrefix %>assets/lib/bootstrap/bootstrap.min.css”>
    <link rel=”stylesheet” href=”<%= htmlWebpackPlugin.options.assetsPrefix %>assets/lib/font-awesome/css/font-awesome.css”>

通過package.json配置了:

  “scripts”: {
    “dev”: “cross-env NODE_ENV=development webpack-dev-server –progress –colors –hot –inline”,
    “lint”: “eslint src”,
    “clean”: “rm -rf build/ build.zip”,
    “package”: “zip -r build.zip build/”,
    “prebuild”: “npm run clean”,
    “build”: “cross-env NODE_ENV=production webpack -p –progress –colors”,
    “postbuild”: “npm run package”
  },

然后就可以:

npm run build去生產環境編譯,所以編譯出來的href地址都是:

    <link rel=”stylesheet” href=”assets/lib/font-awesome/css/font-awesome.css”>

npm run build去開發環境編譯,所以編譯出來的href地址都是:

<link rel=”stylesheet” href=”http://localhost:4000/assets/lib/font-awesome/css/font-awesome.css”>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM