博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
了解webpack-4.0版本(一)
阅读量:7229 次
发布时间:2019-06-29

本文共 4603 字,大约阅读时间需要 15 分钟。

介绍

近期发布了 webpack 4.0.0 的 beta 版本,如果想了解和之前版本的区别,不妨先自己搭建一个webpack的简单应用体验一下。

1.简单案例

安装 npm i webpack --webpack-cli -D

1.1 为了使用命令行进行打包,需要在package.json中配置

"scripts": {    "build": "webpack --mode development",    "dev": "webpack-dev-server --open --mode development"  },复制代码

1.2 webpack.config.js配置

let path = require('path');module.exports = {    entry: './src/index.js',//入口配置    output:{      path:path.join(__dirname,'dist'),//只能写绝对路径,输出文件夹      filename:'bundle.js'//输出文件名    },      module:{           },    plugins:[    ]}复制代码

执行 npx webpack 或者 npm run build压缩 src文件夹下的index.js

1.3 对打包后的js解读

  • 在bundle.js中,生成一个字执行函数,把要打包的js定义为实参,传入到自执行函数当中。
  • 首先会先构建模块的缓存,目的是为了提高模块的加载速度,下次直接从缓存中取

1.4 使用http服务自动访问项目

  • 在dist文件夹下创建index.html文件 引入bundle.js
  • 在src目录下创建index.css 并在index.js中引入index.css
require('./index.css');复制代码
  • 执行npm install style-loader css-loader并在webpack-config.js 中配置loader
rules:[        {          test:/\.css$/,          loader:["style-loader","css-loader"]        }      ]   },复制代码
  • 执行 npm install webpack-dev-server -D
  • 在package.json中 配置 "dev": "webpack-dev-server --open --mode development",在配置--open 后,最后执行npm run dev会自动启动服务打开预览。
  • 在webpack.config.js配置静态文件服务器,可以预览打包后的项目
devServer:{       contentBase:'./dist',//静态文件跟目录       host:'localhost',//配置主机       port:8080,//主机名       compress:true//服务器返回给浏览器是否使用gzip压缩    }复制代码
  • npm run dev成功启动项目

webpack-dev-server是一个小型的Node.jsExpress服务器,它使用webpack-dev-middleware来服务于webpack的包,我们可以看到产出的文件(bundle.js),但是webpack-dev-server打包的文件会放到内存中,不可见。

1.5 使用动态模板产出项目

  • npm i html-webpack-plugin -D 根据模板生成一个html文件
  • 配置webpack-config.js
output:{      path:path.join(__dirname,'dist'),//只能写绝对路径      filename: '[name].[hash].js'//打包后的文件名    },  复制代码

输出文件名,改为变量加上哈希值,避免页面引入js有缓存的情况

const HtmlWebpackPlugin = require('html-webpack-plugin');  plugins:[      new HtmlWebpackPlugin({          template: './src/index.html',          filename: 'index.html',          title: 'hello world!'      }),    ],复制代码

src下创建index.html 模板文件,并且配置参数。

E:\韩佳骏\FF\test\webpack\dist\index.html    
<%=htmlWebpackPlugin.options.title%>
复制代码
  • npm run build dist目录下会自动生成打包后的文件,插入js和传入的title属性

1.6 多入口配置

首先为了每次build后dist下的目录重新打包,方便查看,我们使用

npm i clean-webpack-plugin -D复制代码

引入webpack.config.js中

const CleanWebpackPlugin = require('clean-webpack-plugin'); plugins: [    new CleanWebpackPlugin([path.join(__dirname, 'dist')]),   ...  ],复制代码

如果我们多个页面,并且每个页面引入的模块不相同,该如何配置?

entry: {     index:'./src/index.js',     base:'./src/base.js'  },复制代码

entry 中配置的key相当于每一个代码块chunk,配置多个页面时,每个页面配置需要的模块

plugins: [    new CleanWebpackPlugin([path.join(__dirname, 'dist')]),    new HtmlWebpackPlugin({      template: './src/index.html',//指定产的HTML模板      filename: 'index.html',      title: 'hello index!',      chunks:['index']    }),    new HtmlWebpackPlugin({      template: './src/index.html',//指定产的HTML模板      filename: 'base.html',      title: 'hello base!',      chunks: ['base']    }),  ],复制代码

假如我们需要引入一个公共模块common.js,比如是jquery,我们还要其他模块内部引用jquery,这时 $这个变量被封装在模块内部,其他模块无法拿到jquery对象$,这时需要在plugin中使用一个模块

plugins: [      //用来自动向模块内部注入变量      new webpack.ProvidePlugin({          $: 'jquery'       }),...复制代码

假如我们想把$变成全局变量,那么要引入expose-loader, 它会先加载此模块,然后得到模块的导出对象,并且挂载到window

写法:expose-loader?全局变量名:模块名let $ = require('expose-loader?$!jquery');复制代码

或者

rules: [       {        test: require.resolve('jquery'),        use: {          loader: 'expose-loader',           options: '$'         }       },复制代码

1.7 多个页面配置

let pages = ['index', 'base'];pages = pages.map(page => new HtmlWebpackPlugin({  template: './src/index.html',//指定产的HTML模板  filename: `${page}.html`,//产出的HTML文件名  title: `${page}`,  chunks: [`${page}`],//在产出的HTML文件里引入哪些代码块  hash: true,// 会在引入的js里加入查询字符串避免缓存,  minify: {    removeAttributeQuotes: true  }}))//.... plugins:[ //....  ...pages ]复制代码

1.8 处理图片

在entry 入口配置为main.js,src文件夹下创建images目录放入一张图片

let src = require('./images/timg.jpg');let img = new Image();img.src = src;document.body.appendChild(img);复制代码
npm i file-loader url-loader -D复制代码
{           //file-loader是解析图片地址,把图片从源位置拷贝到目标位置并且修改原引用地址           //url-loader可以在文件比较小的时候,直接变成base64字符串内嵌到页面中           test: /\.(png|jpg|gif|svg|bmp|eot|woff|woff2|ttf)/,           loader: {               loader: 'url-loader',               options: {                   limit: 5 * 1024,                   //指定拷贝文件的输出目录                   outputPath: 'images/'               }           }       },复制代码

npm run build 之后顺利在dist 目录下生成一个images文件。浏览器也顺利访问这张图片。

1.9 使用扩展名

resolve: {        //引入模块的时候,可以不用扩展名         extensions: [".js", ".less", ".json"],        alias: {//别名            "bootstrap": "bootstrap/dist/css/bootstrap.css"        }复制代码

转载地址:http://hgdfm.baihongyu.com/

你可能感兴趣的文章
dubbo与springcloud初识
查看>>
iis web.config 配置示例
查看>>
归并排序
查看>>
java 的转义字符
查看>>
SharedPreferences的使用注意事项
查看>>
sofa-pbrpc高级用法
查看>>
Oracle 函数返回表实例2种写法实例
查看>>
mysql数据库主从复制
查看>>
Shell标准输出、标准错误 >/dev/null 2>&1
查看>>
Android自定义对话框(Dialog)位置,大小
查看>>
设置python的默认编码为utf8
查看>>
简易sqlhelper-java
查看>>
通过案例对SparkStreaming 透彻理解三板斧之一:解密SparkStreaming运行机制
查看>>
HBuilder 学习笔记
查看>>
利用OpenStreetMap(OSM)数据搭建一个地图服务
查看>>
TopN算法与排行榜
查看>>
lucene排序算法之向量空间模型(一)
查看>>
新浪微博数据Json格式解析
查看>>
WLAN 802.11 wifl区别
查看>>
oracle授权动态视图权限给用户
查看>>