Webpack配置解析-你所忽略的部分

喜欢请关注 会不定时更新 ***

1.为什么使用webpack

  • webapck能够处理JS文件相互依赖关系
    例如:在main.js中引入其他js文件
  • webapck 能够处理JS兼容性问题,把高级的、浏览器不识别的语法,转为低级的正常识别
  • 语法指令(终端直接运行)
    webpack 把要打包的文件路径 打包好的输出文件路径

2.为什么要创建webpack.config.js

  • 思考:我们如何直接执行webpack指令(不需要上述复杂的操作) 就可以直接使用打包好的JS文件了呢(偷懒)

webpack.config.js这个配置文件,其实就是一个JS文件,通过node中模块的操作,向外暴露了一个配置对象

const path = require('path');
module.exports={
  //入口、表示,要使用webpack打包哪个文件
 //__dirname:全局变量,存储的是文件所在的文件目录
  entry:path.join(__dirname,'./src/main.js'),
  //输入文件相关配置
  output:{
    path:path.join(__dirname,'./dist'),//指定打包好的文件,输出到哪个目录里去
    filename:'bundle.js'
  }
}
  • 总结
    当我们使用webpack命令执行操作的时候,webpack做了以下几步
    • 首先,webpack发现,我们并没有通过命令形式,给它指定入口和出口
    • webpack就会项目的根目录,查找一个叫做‘webpack.config.js’
    • 当找到配置文件webpack.config.js后,webpack会解析执行这个配置文件,当解析执行完毕后,就得到了这个配置文件,导出的配置对象
    • 当webpack 拿到配置对象后,就拿到了配置对象中的,指定的入口和出口,然后进行打包构建。

3.使用webapck-dev-server工具,实现自动打包编译功能

  • 运行npm i webpack-dev-server -D把这个工具安装到项目本地开发依赖
  • 安装完毕后,这个工具的用法,跟webpack用法完全一样
  • 由于我们是在项目本地安装的webpack-dev-server,所以无法把它当作脚本命令,在powershell终端中直接运行,只有那些安装到全局-g的工具,才能在终端正常执行。
  • 注意:webpack-dev-server 这个工具,如果想要正常运行,需要,在本地项目中,必须安装webpack。npm i webpack -D
  • webpack-dev-server 帮我们打包生成的bundle.js并没有存放到物理磁盘中,而是直接托管到电脑的内存中,所以的项目根目录中,根本找不到打包好的bundle.js
  • 我们可以认为,webpack-dev-server 把打包好的文件,以一种虚拟的形式,托管到了咱们项目的跟目录中 虽然我们看不到它,但是我们可以认为,和dist src node_modules 平级,有一个看不见的文件,叫做bundle.js
    自动打开浏览器
    在package.json下设置内容(npm run dev)
 "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "dev": "webpack-dev-server --open --port 3000 --contentBase src --hot"
  }

4.导入模块方式 improt

import *** from *** import $ from 'jquery'

5. webpack插件

  • html-webpack-plugin
    cnpm i html-webpack-plugin -D
    作用:
    1.自动在内存中根据指定页面生成一个内存的页面
    2.自动把打包好的 bundle.js 追加到页面中去
    修改webpack.config.js这个配置文件:
plugins: [ // 配置插件的节点
        new htmlWebpackPlugin({ // 创建一个 在内存中 生成 HTML  页面的插件
          template: path.join(__dirname, './src/index.html'), 
          // 指定 模板页面,将来会根据指定的页面路径,去生成内存中的 页面
          filename: 'index.html' // 指定生成的页面的名称
        })
      ]

6.使用webpack打包css文件及 webpack 处理第三方文件类型的过程

原因

  • webpack, 默认只能打包处理 JS 类型的文件,无法处理 其它的非 JS 类型的文件;
    例如在入口文件main.js里引入
    import './css/index.css'
  • 运行cnpm i style-loader css-loader --save-dev
  • 修改webpack.config.js这个配置文件:
module: { // 用来配置第三方loader模块的
        rules: [ // 文件的匹配规则
            //处理css文件的规则
            { test: /\.css$/, use: ['style-loader', 'css-loader'] }
        ]
    }

webpack 处理第三方文件类型的过程

  • 发现这个 要处理的文件不是JS文件,然后就去 配置文件中,查找有没有对应的第三方 loader 规则
  • 如果能找到对应的规则, 就会调用 对应的 loader 处理 这种文件类型
  • 在调用loader 的时候,是从后往前调用的
  • 当最后的一个 loader 调用完毕,会把 处理的结果,直接交给 webpack 进行 打包合并,最终输出到 bundle.js 中去

7. 使用webpack打包less文件

  • 语法
    cnpm i less-loader less -D
  • 修改webpack.config.js这个配置文件:
    test: /.less$/, use: ['style-loader', 'css-loader', 'less-loader']

8. 使用webpack打包sass文件

  • 语法
    cnpm i sass-loader node-sass --save-dev
  • 在webpack.config.js中添加处理sass文件的loader模块
    { test: /.scss$/, use: ['style-loader', 'css-loader', 'sass-loader'] }

9. 使用webpack处理css中的路径

  • 语法
    cnpm i url-loader file-loader --save-dev

10.在webpack中配置.vue组件页面的解析

  • cnpm i vue-loader vue-template-compiler -D将解析转换vue的包安装为开发依赖;
  • 在webpack.config.js中,添加如下module规则
module: {
       rules: [
           { test: /\.css$/, use: ['style-loader', 'css-loader'] },
           { test: /\.vue$/, use: 'vue-loader' }
            ]
      }

包的查找规则

import Vue from 'vue'
// import Vue from '../node_modules/vue/dist/vue.js'
// 回顾 包的查找规则:
// 1. 找 项目根目录中有没有 node_modules 的文件夹
// 2. 在 node_modules 中 根据包名,找对应的 vue 文件夹
// 3. 在 vue 文件夹中,找 一个叫做 package.json 的包配置文件
// 4. 在 package.json 文件中
      //查找 一个 main 属性【main属性指定了这个包在被加载时候,的入口文件】

// var login = {
//   template: '<h1>这是login组件,是使用网页中形式创建出来的组件</h1>'
// }

// 1. 导入 login 组件
import login from './login.vue'
// 默认,webpack 无法打包 .vue 文件,需要安装 相关的loader: 
//  cnpm i vue-loader vue-template-compiler -D
//  在配置文件中,新增loader哦配置项 { test:/\.vue$/, use: 'vue-loader' }

总结

总结梳理: webpack 中如何使用 vue

  • 安装vue的包: cnpm i vue -S
  • 由于 在 webpack 中,推荐使用 .vue 这个组件模板文件定义组件,所以,需要安装 能解析这种文件的 loader cnpm i vue-loader vue-template-complier -D
  • 在 main.js 中,导入 vue 模块 import Vue from 'vue'
  • 定义一个 .vue 结尾的组件,其中,组件有三部分组成: template script style
  • 使用 import login from './login.vue'导入这个组件
  • 创建 vm 的实例var vm = new Vue({ el: '#app', render: c => c(login) })
  • 在页面中创建一个 id 为 app 的 div 元素,作为我们 vm 实例要控制的区域;
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,417评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,921评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,850评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,945评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,069评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,188评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,239评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,994评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,409评论 1 304
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,735评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,898评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,578评论 4 336
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,205评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,916评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,156评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,722评论 2 363
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,781评论 2 351