webpack(四)自动化生成html文件

webpack(四)自动化生成html文件

1、安装html-webpack-plugin插件
(1)npm安装
输入命令:npm install html-webpack-plugin --save-dev
如果出错就换成该命令:cnpm i --save-dev html-webpack-plugin@next
(根据经验使用第一条命令容易出错,建议使用第二条命令)
在这里插入图片描述
(2)淘宝镜像安装
输入命令:cnpm install html-webpack-plugin --save-dev(注:此种添加依赖的方法容易出错,建议输入命令:cnpm i --save-dev html-webpack-plugin@next
在这里插入图片描述
2、在webpack.config.js引入html-webpack-plugin插件

const path = require('path');   //引入模块
const htmlWebpackPlugin = require('html-webpack-plugin');  //引入html-webpack-plugin插件

module.exports ={    //js资源的打包
 // mode:"development",    //webpack4.x需添加的内容,webpack3.x则需要注释掉
  entry: {
    hello:path.join(__dirname,'./src/script/hello.js'),
    word:path.join(__dirname,'./src/script/word.js') //打包入口文件路径+文件名
  },
  output: {   //打包完输出的文件
    path: path.join(__dirname,'./dist/js'),   //打包输出文件的路径
    filename: "[name].boudle.js"    //打包输出的文件
    //有多个打包入口文件时,则filename需要[name]或[hash]或[name]-[hash]占位
  },
  plugins:[   //插件,注意后面有“s”
    //初始化html插件
    new htmlWebpackPlugin()
  ]
}

3、输入命令npm run webpack打包(也可以使用webpack)
(1)要使用npm run webpack 打包,需要在package.json文件的scripts添加语句

"scripts": {
    "webpack": "webpack --config webpack.config.js --progress --display-modules --displas"

(2)打包成功
在这里插入图片描述
在这里插入图片描述

整个过程中出现过的报错:
(1)未在webpack项目根目录下添加webpack依赖,而是在总项目根目录下添加的依赖
在这里插入图片描述
输入npm run webpack报以下错误:
在这里插入图片描述
解决方案:在webpack项目根目录下添加依赖
在这里插入图片描述
(2)自动化生成html文件,当版本为webpack3.x的时候,不能在webpack.config.js增加“mode:‘development’ ”语句(对于只是打包文件而不自动化生成html,在webpack3.x下似乎无影响),否则会报以下错误:
在这里插入图片描述
解决方法(1):
在这里插入图片描述
解决方案(2):仍使用webpack4.x,但版本不兼容,并且之前添加webpack4.41.0依赖失败,需要重新添加依赖并升级html-webpack-plugin
输入命令:cnpm i --save-dev html-webpack-plugin@next
cnpm install --save-dev webpack@4.41.0
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
运行npm run webpack
在这里插入图片描述
总结:
(1)添加依赖时一定要指定版本
例子:
npm i --save-dev html-webpack-plugin@next(添加最新版)
cnpm install --save-dev webpack@版本号
添加其他的插件依赖方法类似
(2)不能出现重复命名,即使不在同一个文件夹

html-webpack-plugin插件的选件

1、可以将配置选项的哈希值传递给html-webpack-plugin,允许值如下:
参考文档:https://github.com/jantimon/html-webpack-plugin#options

2、常用的配置选件
(1)

 plugins: [  //插件
    //初始化html插件
    new htmlWebpackPlugin({
      template: "./src/example.html",  //指定模板
      filename:'./webhtml/helloWord.html',  //编译后出口的文件名及路径
      inject: 'body', //把脚本放在哪个脚本内,head或者body
      title: "Webpack App"  //页面的title,模板html可以通过引用这个变量来展示
    })
  ]

(2)要在模板中引用title这个变量,需要在模板html中title标签中添加引用语句

<title><%= htmlWebpackPlugin.options.title %></title>

在这里插入图片描述
(3)在平时项目中,并不希望html文件与js文件在同一级目录下,修改webpack.config.js文件中的output属性值

output: {
    path: path.join(__dirname,'./dist'),  //打包出口文件目录
    filename: "boudle/[name].boudle.js"  //输出的文件名,输出js可以在这里指定。例如该例子就指定输出的js目录是./dist/boudle
  },

(3)在控制台输入命令:npm run webpack
在这里插入图片描述
(4)项目上线输出时引用js等的路径不能是相对地址,应使用output里面的publicPath 设置域名等绝对地址前缀

const path = require('path');  //引入模块
const htmlWebpackPlugin = require('html-webpack-plugin');   //引入插件

module.exports={
  mode: "development",  //mode的类型
  entry:{
    word: path.join(__dirname,'./src/script/word.js'),   //打包的入口文件路径+文件名
    welcome: path.join(__dirname,'./src/script/welcome.js')
  },
  output: {
    path: path.join(__dirname,'./dist'),  //打包出口文件路径
    filename: "boudle/[name].boudle.js" , //输出的文件名
    publicPath: "http://www.zs.com" //项目上线输出时引用js等的路径不能是相对地址,应使用output里面的publicPath设置域名等绝对地址前缀
  },
  plugins: [  //插件
    //初始化html插件
    new htmlWebpackPlugin({
      template: "./src/example.html",  //模板
      filename:'./webhtml/helloWord.html',  //编译后的文件名及路径
      inject: 'body', //把脚本放在哪个脚本内,head或者body
      title: "Webpack App"  //页面的title,模板html可以通过引用这个变量来展示
    })
  ]
};

在这里插入图片描述
(5)压缩html文件。使用minify 进行压缩

   plugins: [  //插件
    //初始化html插件
    new htmlWebpackPlugin({
      template: "./src/example.html",  //模板
      filename:'./webhtml/helloWord.html',  //编译后的文件名及路径
      inject: 'body', //把脚本放在哪个脚本内,head或者body
      title: "Webpack App",  //页面的title,模板html可以通过引用这个变量来展示
      minify:{  //压缩html
        collapseWhitespace:true, //删除空格
        removeComments:true, //去除注释
      }
    })
  ]

效果:
在这里插入图片描述
其他参数可查看文档:https://github.com/kangax/html-minifier#options-quick-reference

(6)根据一个模板文件生成多个html页面,并且每个页面引用不同的js文件
生成多个html文件,需要初始化多个htmlWebpackPlugin插件

const path = require('path');  //引入模块
const htmlWebpackPlugin = require('html-webpack-plugin');   //引入插件

module.exports={
  mode: "development",  //mode的类型
  entry:{
    //打包的入口文件chunk,可以是一个string字符串,也可以是一个数组,还可以是一个json对象
    word: path.join(__dirname,'./src/script/word.js'),   //打包的入口文件路径+文件名
    welcome: path.join(__dirname,'./src/script/welcome.js')
  },
  output: {
    path: path.join(__dirname,'./dist'),  //打包出口文件路径
    filename: "boudle/[name].boudle.js" , //输出的文件名
    publicPath: "http://www.zs.com" //项目上线输出时引用js等的路径不能是相对地址,应使用output里面的publicPath设置域名等绝对地址前缀
  },
  plugins: [  //插件
    //初始化html插件
    //生成多个html文件,需要初始化多个htmlWebpackPlugin插件
    new htmlWebpackPlugin({   //hello.html
      template: "./src/example.html",  //模板
      filename:'./webhtml/welcome.html',  //编译后的文件名及路径
      inject: 'body', //把脚本放在哪个脚本内,head或者body
      title: "WebpackApp-Hello",  //页面的title,模板html可以通过引用这个变量来展示到新页面
      minify:{  //压缩html
        collapseWhitespace:true, //删除空格
        removeComments:true, //去除注释
      },
      chunks: ["welcome"]  //引用entry的哪一个chunks(引用哪一个入口文件)
    }),
    new htmlWebpackPlugin({   //word.html
      template: "./src/example.html",  //模板
      filename:'./webhtml/word.html',  //编译后的文件名及路径
      inject: 'body', //把脚本放在哪个脚本内,head或者body
      title: "WebpackApp-Word",  //页面的title,模板html可以通过引用这个变量来展示到新页面
      minify:{  //压缩html
        collapseWhitespace:true, //删除空格
        removeComments:true, //去除注释
      },
      chunks: ['word'] //引用entry的哪一个chunks
    })
  ]
};

效果:

在这里插入图片描述
总结:
<% %>为js的模板引擎的运行符
<%= %>则为js的模板引擎取值符

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值