三、webpack

1.1、安装 webpack 全局

安装命令:

全局安装

@3.6.0:为版本号
-g  :为全局
npm  install webpack@3.6.0 -g

执行打包命令:

./src/main.js :被打包的文件
./dist/build.js:打包后的文件
webpack ./src/main.js ./dist/build.js

1.2、webpack.config.js配置和package.json 配置

webpack.config.js 配置文件是用来配置 webpack 打包文件的入口文件路径和出口文件路径,可以让我们简写命令的方式进行打包,以前的命令是 webpack ./src/main.js ./dist/build.js,现在配置后我们可以直接写 webpack 命令 生成打包后的文件。

webpack.config.js 【名字不可修改,路径必须在根目录下】配置代码如下:

const path = require('path');
module.exports = {
  //入口
  entry: './src/main.js',
  //出口
  output: {
    path: path.resolve(__dirname,'dist'),
    filename: 'builder.js'
  }
}

const path = require('path'); 必须引入node.js的包,需要执行初始化命令:

//一路next 就可以
npm init

执行完命令后,他将生成一个json文件,也就是package.json。

在实际的项目中,一般不会使用webpack这种命令,一般会使用 npm run .. 命令,这种命令需要在package.json配置进行映射,代码如下:

{
  "name": "webpackdemo",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "build":"webpack" 
  },
  "author": "",
  "license": "ISC"
}

这个 "build":"webpack" 就是我们配置出打包命令: 注意:在终端执行npm run build,它将去json文件scripts标签下找到build,然后执行 webpack脚本命令,

npm run build

开发过程中,一般安装完全局webpack后还得在项目中安装一个本地的webpack,安装命令如下:

//开发时依赖
npm  install webpack@3.6.0 --save-dev

1.3、webpack 使用css文件

官方文档:https://webpack.docschina.org/

loader:【核心】将css、图片、高级的ES6语法转化成ES5 代码等等,就得需要loader进行转换。

不同的文件处理需要不同的loader。

安装lloder之前,首先必须给css文件建立依赖

在main.js文件中引用css文件:

import css from "./css/style.css";

安装loader命令

//第一步 通过 npm 安装 loader  开发时依赖   webpack 是 3.6.0的版本,安装loder也应该对应的相应的版本,要不然会报 :UnhandledPromiseRejectionWarning: TypeError: this.getResolve is not a function 错误
//加载css文件 loader
 npm install --save-dev css-loader@3.6.0   
// 将样式添加到dom中的  loader
npm install --save-dev style-loader@0.23.1
//第二步 在webpack.config.js中的modules关键字下进行配置  详情看官方文档
 module:{
    rules: [
      {
        test: /\.css$/i,
        //css-loader 只负责加载css文件
        //style-loader 将样式添加到dom中
        use: [ 'style-loader', 'css-loader' ],
      },
    ]
  } 

webpack  3.6.0 对应的版本:
    "css-loader": "^1.0.1",
    "less": "^3.9.0",
    "less-loader": "^5.0.0",
    "style-loader": "^0.23.1",
    "url-loader": "^2.1.0",
    "vue-loader": "^13.0.0",
    "vue-template-compiler": "^2.6.10",
    "webpack": "^3.6.0"

1.4、webpack less文件处理

代码如下:

//安装less-loader,命令如下:  webpack 版本为 3.6.0
npm install less@3.9.0 less-loader@5.0.0 --save-dev

webpack.config.js 配置如下:
  module: {
    rules: [
        //css-loader  和 style-loader
      {
        test: /\.css$/i,
        use: ["style-loader", "css-loader"],
      },
        //less-loader
      {
        test: /\.less$/i,
        use: [
          {
            loader: "style-loader"
          },
          {
            loader: "css-loader"
          },
          {
            loader: "less-loader"
          }
        ],
      }
    ]
  }

  1. 5、webpack 图片处理

    1)、先有两张图片,一个是大于8kb,一个小于8kb,因为配置中它将以不同的方式展示图片

    2)、在css文件中使用图片做为背景

     background: url("../imgs/12.jpg");
    
    

    3)、安装加载图片用到的loader,并配置loader

npm install --save-dev url-loader@2.3.0 
 module: {
    rules: [  
      {
        test: /\.(png|jpg|gif)$/,
        use: [
          {
            loader: 'url-loader',
            options: {
              //当图片加载图片的大小大于 limit 它将使用file-loader加载图片
              //当图片加载时图片的大小小于 limit  他将图片编译成base64的方式显示图片
              limit:8159,
              //将图片打包到dist其他文件夹下,并更改图片名称
              //img: 新建的文件夹
              //[name].[hash:8].[ext] :name :原来的文件名  hash:8:将哈希值截取8位 ext:原来文件的扩展名
              name:"img/[name].[hash:8].[ext]"
            }, 
          } 
        ]
      }
    ]
  }
npm install --save-dev file-loader@3.0.1  //只安装不需要配置

//如果图片大小大于limit值,他将会以file-loader形式加载图片,如果没有配置图片的路径,它将找不到图片,需要在webpack.config.js文件配置:[在出口文件中进行配置]

module.exports = {
  //打包入口文件
  entry: './src/main.js',
  //打包出口文件
  output: {
    ...........
    publicPath:'../dist/'
  }

总结:

当图片加载图片的大小大于 limit 它将使用file-loader加载图片。

当图片加载时图片的大小小于 limit 他将图片编译成base64的方式显示图片。

如果执行打包命令后需要将打包后的文件放到其他文件加下,需要在url-loader中选项中进行配置:

name:"img/[name].[hash:8].[ext]"

img : 文件夹名称

[name]:原来文件的名称

[hash:8]:哈希值截取8位

[ext]:文件的扩展名

1.6、webpack ES6装换ES5的babel
//安装命令
npm  install --save-dev babel-loader@7 babel-core babel-preset-es2015
//webpack.config.js中 module 增加 loder 配置 ,如下 
      {
        test: /\.js$/,
        exclude: /(node_modules|bower_components)/,
        use: {
          loader: 'babel-loader',
          options: {
            presets: ['es2015']
          }
        }
      }

1.7、webpack 使用 Vue

1)安装Vue

   npm install vue --save 

2)、在webpack.config.js中进行配置:

 module: {
    rules: [
      ........
  resolve:{
    alias:{
      'vue$':'vue/dist/vue.esm.js'
    }
  }

3)、在js文件中引用vue:

import Vue from 'vue'
const app = new Vue({
    el:"#app"
});

1.8、创建Vue时template与el的关系

index.html 代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>

</head>
<body>
  <div id ="app"> 
  </div>
  <script src="../dist/build.js"></script>
</body>
</html>

main.js 代码如下:

import Vue from "vue";
new Vue({
  el: '#app',
  template: `
  <div>{{mess}}</div>
  `,
  data: {
    mess: "您好"
  }
});

总结:

在Vue实例化中加上template属性后,他会将el绑定的dom对象替换成template中的html内容。

1.9、Vue终极使用方案 将Vue实例中template抽离

1)、 安装 Vue -loader :

npm install vue-loader@13.0.0 vue-template-compiler --save-dev

##webpack.config.js 增加 vue-loader 配置
  {
        test: /\.vue$/i,
        use: ["vue-loader"],
 }

2)、 index.html 代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>

</head>
<body>
  <div id ="app"> 
  </div>
  <script src="../dist/build.js"></script>
</body>
</html>

3)、新建Vue文件夹,文件夹下建App.vue,代码如下:

<template>
  <div class ="title">{{mess}}</div>
</template>
<script>
export default {
  name:"App",
   data(){
    return{
      mess: "您好"
    }
  }
}
</script> 
<style scoped>
.title{
  color:green;
}
</style>

4)、在main.js中导入vue文件,代码如下:

import app from "./vue/App.vue"

  1. 0、webpack Plugin 核心

Plugin是什么

Plugin插件的意思,通常是用于对某个现有的架构进行扩展。

webpack中的插件,就是对webpack现有的功能的各种扩展,比如优化、打包、文件压缩等等。

loader与plugin的区别

loader:主要用于转换某些类型的模块,他是一个转换器。

plugin:是插件,它是对webpack本身的一个扩展,是一个扩展器。

plugin的安装:

是通过npm对plugin进行安装。

在webpack.config.js 中进行配置。

添加版权 plugin 插件:不需要用 npm安装,webpack 中自带

//在webpack.config.js中添加  版权声明插件的配置
//1) 导入webpack 
const webpack =require('webpack');
//2) 在 module 配置插件 
 module.exports = {
   ........
  //样式loder配置
  module: {
    ...
  },
  //Vue配置
  resolve:{
    ........
  },
  //插件配置
  plugins:[
     new webpack.BannerPlugin("版权信息名称!")
  ] 
}

2.1、webpack-HtmlWebpackPlugin 使用

HtmlWebpackPlugin是将项目中的html文件打包到dist文件中去,命令:

npm install html-webpack-plugin --save-dev
//增加引用:
const HtmlWebpackPlugin = require('html-webpack-plugin');  
//增加配置: 
 //配置打包的html文件 
 module.exports = {
   ........
  //样式loder配置
  module: {
    ...
  },
  //Vue配置
  resolve:{
    ........
  },
   plugins:[

     //配置打包的html文件
     new HtmlWebpackPlugin({
       template:'index.html'
     })
  ]
}

2.2、webpack-UglifyjsWebpackPligin js压缩插件

安装命令:

npm install uglifyjs-webpack-plugin@1.1.1 --sava-dev

在webpack.config.js 中进行配置:

//导入包
uglifyJsPlugin =require('uglifyjs-webpack-plugin');
//增加配置: 
 //配置压缩
 module.exports = {
   ........
  //样式loder配置
  module: {
    ...
  },
  //Vue配置
  resolve:{
    ........
  },
  plugins:[
     //配置压缩
     new uglifyJsPlugin()
  ]
}

2.3、webpack-dev-server 搭建本地服务器

安装命令:

npm install --save-dev  webpack-dev-server@2.9.1

在webpack.config.js中增加配置:

 module.exports = {
   ........
  //样式loder配置
  module: {
    ...
  },
  //Vue配置
  resolve:{
    ........
  },
  plugins:[
     //配置压缩
     new uglifyJsPlugin()
  ],
   //增加本地服务器配置
   devserver:{
    contentBase:"./dist",
    inline:true
  }
}

在package.json中增加执行脚本配置:

##--open将自动打开浏览器  
"scripts": { 
    "dev":"webpack-dev-server --open" 
  }

然后运行命令:

npm run dev
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,098评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,213评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,960评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,519评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,512评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,533评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,914评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,804评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,563评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,644评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,350评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,933评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,908评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,146评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,847评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,361评论 2 342

推荐阅读更多精彩内容