Vue2之webpack篇(二)Loader

news2025/1/19 20:28:31

目录

一、loader处理css

1、css文件的创建

2、安装css-loader

 3、配置

4、打包

 5、最终效果

二、loader处理图片

1、引入图片

2、安装file-loader

3、配置module

4、webpack打包

 三、ES6转ES5

1、介绍

2、安装babel-loader

3、webpack.config.js配置

4、webpack打包

四、打包Vue

1、下载vue

2、引入、使用vue

五、分离vue

1、分离过程

2、设置vue子组件

 3、父、子组件传参


回顾上一篇文章的例子,我们使用webpack来处理我们写的js代码,并且了解webpack会自动处理js之间相关的依赖

Vue2之webpack篇(一)传统开发模式、ES6模块化、CommonJS规范、webpack概念、webpack配置文件、项目管理文件https://blog.csdn.net/qq_51478745/article/details/127944476?spm=1001.2014.3001.5502在实际项目中不仅仅有js文件,还有css、图片,ES6转化ES5,TypeScript转化ES5代码,将less,scss转化css,将jsx,vue文件转化js文件等

对于webpack本身来说是不具备这些转化功能的,这时候必须使用对应的loader进行处理


一、loader处理css

1、css文件的创建

(1)在工程下创建一个css文件夹==》创建一个index.css文件

body{
    background-color: skyblue;
}

(2)在main.js文件中引入index.css文件

import indexCss from './css/index.css'

(3)在项目终端进行webpack打包

此时报错提醒,需要我们下载引用css的loader

2、安装css-loader

(1)css-loader@5:5是版本号

npm install --save-dev css-loader@5

(2)通过查看package.json文件,是否安装成功

 3、配置

(1)在webpack.config.js文件配置【module】

module.exports = {
  module: {
    rules: [
      {
        test: /\.css$/i,
        use: ["style-loader", "css-loader"],
      },
    ],
  },
};

(2)小伙伴们可以通过文档,参考操作步骤

css-loader | webpack 中文文档 | webpack 中文文档 | webpack 中文网webpack 是一个模块打包器。它的主要目标是将 JavaScript 文件打包在一起,打包后的文件用于在浏览器中使用,但它也能够胜任转换(transform)、打包(bundle)或包裹(package)任何资源(resource or asset)。https://www.webpackjs.com/loaders/css-loader/

4、打包

(1)在项目终端输入webpack

此时发现又报错了,是因为

(2)安装style-loader

npm install --save-dev style-loader@2

 (3)再重新webpack

 5、最终效果

回到class.html界面启动,会看到index.css渲染的body背景skyblue成功


二、loader处理图片

1、引入图片

(1)创建文件夹image==》引入一张本地图片1.jpg

(2)将index.css修改,注意路径

body{
    background-image: url('../image/1.jpg');
}

(3)此时webpack打包一样开始报错

告诉我们需要处理图片的loader,即file-loader

2、安装file-loader

项目终端输入如下代码:

npm install --save-dev file-loader@4

3、配置module

module: {
    rules: [
      {
        test: /\.css$/i,
        use: ["style-loader", "css-loader"],
      },
      // 处理css中图片的使用
      {
        test: /\.(png|jpg|git)$/,
        /* 数组对象形式 */
        use: [
          {
            // 使用file loader,解析文件路径
            loader: "file-loader",
          },
        ],
      },
    ],
  },

4、webpack打包

(1)此时又出现了问题,图片无法正常显示,是因为打包后的图片路径问题,因此还要再配置

module: {
    rules: [
      {
        test: /\.css$/i,
        use: ["style-loader", "css-loader"],
      },
      // 处理css中图片的使用
      {
        test: /\.(png|jpg|git)$/,
        /* 数组对象形式 */
        use: [
          {
            // 使用file loader,解析文件路径
            loader: "file-loader",
            // 配置
            options: {
              // 指定html中引用图片的相对html文件的路径
              publicPath: "./dist/",
              // 指定文件名,一般会放在一个img相关的文件夹中
              name: "imgs/[contenthash].[ext]",
            },
          },
        ],
      },
    ],
  },

注意配置的dist路径 

(2)再webpack打包,就成功显示了


 三、ES6转ES5

1、介绍

(1)当检查打包后的文件有es6代码,有的浏览器还不支持es6,所以有时候需要将es6的代码转化成es5

(2)例子:定时器箭头函数

①在main.js文件中设置一个定时器

setTimeout(()=>{
  console.log(0);
},1000)

②终端webpack打包,页面控制台会延迟一秒钟打印0

(3)此时去到项目的dist文件夹下的bundle.js文件,找到我们写的箭头函数

 可见此时打包后代码是按照es6来写,如果要将其按照es5来写,需要babel-loader

2、安装babel-loader

npm install @babel/core@7 @babel/preset-env@7 babel-loader@8 babel-preset-env

3、webpack.config.js配置

// 处理es6
{
    test: /\.js$/,
        // 除去node_modules文件夹,避免项目依赖包和插件被更改
        exclude: /(node_modules)/,
            use: {
                loader: 'babel-loader',
                    options: {
                        presets: ['@babel/preset-env']
                    }
            }
}

4、webpack打包

一样可以正常显示,此时观察dist文件夹下的bundle.js文件

 打包完的代码,已经将我们写的es6语法转为es5语法


四、打包Vue

1、下载vue

npm i vue@2

2、引入、使用vue

(1)页面显示msg属性的值,即我是vue

main.js文件

// vue
import Vue from "vue";
// new一个vue实例
new Vue({
  el:'#app',//对class.html文件有id="app"属性值标签的挂载
  data:{
    msg:'我是vue'
  }
})

class.html文件

<body>
    <div id="app">{{msg}}</div>
</body>

 但是发现msg的值并未正常显示,因此要配置vue

(2)webpack.config.js配置resolve

resolve: {
    alias: {
        // 指定使用vue包中的版本
        'vue$': 'vue/dist/vue.esm.js'
    }
}

(3)class.html文件的js引入放到标签下面

因为代码运行顺序是从上往下,如果vue实例在标签之前运行,vue实例是找不到绑定id='app'的标签

<body>
    <div id="app"><h1>{{msg}}</h1></div>
    <script src="./dist/bundle.js"></script>
</body>

(4)webpack打包


五、分离vue

1、分离过程

(1)局部组件的语法糖

new Vue({
  el:'#app',
  template:'<App></App>',
  components:{
    App:{
      template:'<h1>{{msg}}</h1>',
      data(){
        return {
          msg:'我是vue'
        }
      }
    }
  }
})

(2)组件单独出来

const App = {
  template:'<h1>{{msg}}</h1>',
  data(){
    return {
      msg:'我是vue'
    }
  }
}
// new一个vue实例
new Vue({
  el:'#app',//对class.html文件有id="app"属性值标签的挂载
  template:'<App></App>',
  components:{
    App,//增强写法
  }
})

 (3)将组件对象单独写一个App.js文件

main.js文件

import Vue from "vue";
import App from "./App.js"
new Vue({
  el:'#app',//对class.html文件有id="app"属性值标签的挂载
  template:'<App></App>',
  components:{
    App,
  }
})

App.js

export default {
  template: "<h1>{{msg}}</h1>",
  data() {
    return {
      msg: "我是vue",
    };
  },
};

(4)再分离,将template内容单独分离,引入一个vue文件写

main.js

import Vue from "vue";
import App from "./App.vue"
new Vue({
  el:'#app',
  template:'<App></App>',
  components:{
    App,
  }
})

App.vue

<template>
    <div>
        <h1>{{msg}}</h1>
    </div>
</template>
<script>
export default{
    data() {
    return {
      msg: "我是vue",
    };
  },
}
</script>

①webpack打包,此时又开始报错,是因为没有loader处理.vue这种文件类型

②安装vue-loader,终端分别输入下面两个代码

npm i vue-loader@14
npm i vue-template-compiler

③webpack.config.js文件配置modle

// .vue 相关的loader 
{
    test: /\.vue$/,
        use: ['vue-loader'],
},

④webpack打包即可

2、设置vue子组件

(1)创建文件夹view==》创建文件login.vue

<template>
    <div>
        <div class="box"></div>
    </div>
</template>

<script>
export default {
    data(){
        return{}
    }
};
</script>

<style scoped>
/* scoped表示设置的css样式仅适用于当前.vue文件 */
.box{
    width: 100px;
    height: 100px;
    background-color: red;
}
</style>

(2)在App父组件注册login子组件,并在页面显示

<template>
    <div>
        <h1>{{msg}}</h1>
        <!-- 子组件login的使用 -->
        <login></login>
    </div>
</template>
<script>
import login from "./view/login.vue"

export default{
    data() {
    return {
      msg: "我是vue",
    };
  },
  components:{//注册
    login
  },
}
</script>

(3)webpack打包

 3、父、子组件传参

(1)父组件向子组件传递点击的城市

App.vue文件

<template>
    <div>
        <h1>{{msg}}</h1>
        <ul>
            <li v-for="item in cityArr" :key="item" @click="cityClick(item)">
                <h1>{{ item }}</h1>
            </li>
        </ul>
        <login :cityName="selectCity"></login>
    </div>
</template>
<script>
import login from "./view/login.vue"

export default{
    data() {
    return {
      msg: "我是vue",
      cityArr:['重庆','天津','上海','北京'],
      selectCity:null,
    };
  },
  methods:{
    cityClick(item){
        console.log(item);
        this.selectCity = item
    }
  },
  components:{
    login
  },
}
</script>

login.vue文件

<template>
    <div>
        <div class="box">
            <h3>{{ cityName }}</h3>
        </div>
    </div>
</template>

<script>
export default {
    data(){
        return{}
    },
    props:{
        cityName:{
            type:String,
            default(){
                return '默认'
            }
        }
    },
};
</script>

<style scoped>
/* scoped表示设置的css样式仅适用于当前.vue文件 */
.box{
    width: 100px;
    height: 100px;
    background-color: red;
}
</style>

 

(2)子组件向父组件传递信息

App.vue

<template>
    <div>
        <h1>{{msg}}</h1>
        <ul>
            <li v-for="item in cityArr" :key="item" @click="cityClick(item)">
                <h1>{{ item }}</h1>
            </li>
        </ul>
        <login :cityName="selectCity" @login-btn="btnClick"></login>
    </div>
</template>
<script>
import login from "./view/login.vue"

export default{
    data() {
    return {
      msg: "我是vue",
      cityArr:['重庆','天津','上海','北京'],
      selectCity:null,
    };
  },
  methods:{
    cityClick(item){
        console.log(item);
        this.selectCity = item
    },
    btnClick(msg){
        alert(msg)
    }
  },
  components:{
    login
  },
}
</script>

login.vue

<template>
    <div>
        <div class="box">
            <h3>{{ cityName }}</h3>
            <button @click="btnClick">点击</button>
        </div>
    </div>
</template>

<script>
export default {
    data(){
        return{
            msg:'我是子组件'
        }
    },
    methods:{
        btnClick(){
            this.$emit('login-btn',this.msg)
        }
    },
    props:{
        cityName:{
            type:String,
            default(){
                return '默认'
            }
        }
    },
};
</script>

<style scoped>
/* scoped表示设置的css样式仅适用于当前.vue文件 */
.box{
    width: 100px;
    height: 100px;
    background-color: red;
}
</style>

 (3)父子传参详细步骤的学习,小伙伴们可以参考小编下面的文章

Vue基础语法(四)_申小兮IU的博客-CSDN博客父组件向子组件通信(数据传递),子组件向父组件通信,父组件访问子组件,子组件访问父组件https://blog.csdn.net/qq_51478745/article/details/127495034

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/434810.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++数据结构:二叉树

二叉树 每个结点最多只有二棵子树&#xff0c;也就是二叉树中没有度大于2的结点。二叉树的子树有左右之分&#xff0c;严格区分左孩子、右孩子&#xff0c;其次序不能颠倒 二叉树五种基本形态 特殊二叉树 斜树 所有节点都只有左子树的二叉树叫做左斜树&#xff0c;所有节点都…

SAP ABAP 创建后台定时任务job

定时任务的事务码 sm36:创建定时任务 sm37:查看定时任务 JDBG:后台任务debug,在对应的sm37中对应的job页面 t-code输入 创建定时任务SM36 1、名称可以随便起一般都是按自己公司业务情况来&#xff0c;比如我这个就是哪一个报表的定时任务&#xff0c;做的是什么操作&#xf…

Python 全栈系列220 Tornado的服务搭建

说明 想法变的真快 本来是没打算用Tornado的&#xff0c;主要是想节约时间。但是现在看来不用还是不行&#xff1a;目前用gevent flask部署的时候&#xff0c;启动多核的worker似乎存在问题。 另外&#xff0c;有很多内部基础的数据服务&#xff0c;其实并不需要flask的各种组…

如何使用镭速保护云存储数据安全

近年来&#xff0c;随着云计算的发展&#xff0c;远程系统上的数据存储变的越来越重要。云存储是一个以数据存储和管理为核心的云计算系统&#xff0c;给我们提供了一种全新的数据信息存储模式。但是&#xff0c;可以从全球任何地方访问和检索相同的数据。所需要的只是一个简单…

ZooKeeper分布式应用程序协调服务

目录 一.ZooKeeper基本介绍 1.ZooKeeper是什么&#xff1f; 2.ZooKeeper的工作机制 3.ZooKeeper的特点 4.ZooKeeper的数据结构 5.ZooKeeper的应用场景 5.1 统一命名服务 5.2 统一配置管理 5.3 统一集群管理 5.4 服务器动态上下线 5.5 软负载均衡 二.ZooKeeper的选举…

EasyConnect登陆报错:拉起虚拟网卡失败,请确保虚拟网卡已经安装在系统上并处于启用状态,然后再重新登录解决此问题。

目录 项目场景&#xff1a; 问题描述 原因分析&#xff1a; 解决方案&#xff1a; 1. 搜索设备管理器&#xff0c;打开/或者打开此电脑-&#xff08;顶部&#xff09;计算机-属性-设备管理器进入 2. 进入设备管理器&#xff0c;找到网络适配器&#xff0c;双击网络适配器…

【云原生】k8s Service 实现服务发现和负载均衡

文章目录 前言Service 介绍Service 的四种类型及使用方式Service 的定义和使用通过命令创建服务查看创建的服务情况 不指定 Selectors 的服务Headless 服务Service 工作原理及原理图Ingress 讲解集群外部如何访问服务总结 前言 在容器编排系统中&#xff0c;如 Kubernetes&…

Anaconda + TensorFlow Winodws环境安装(Windows Terminal / Visual Studio / VS code)

目录 前言个人环境 Anaconda安装下载安装测试添加到windows terminal TensorFlow环境配置安装测试 搭配Visual Studio 2022搭配VS Code 前言 以前发生的一些事情&#xff0c;让我认识到即便配环境这种事情&#xff0c;最好还是把自己的过程存个档 &#xff0c;这个的安装虽然简…

前端HTML、CSS--11(CSS-8)

目录&#xff1a; CSS3 属性选择器 CSS3 结构伪类选择器 CSS3 伪元素选择器 CSS3 2D转换 CSS3 动画 CSS3 3D转换 浏览器私有前缀 4. 2D转换 转换&#xff08;transform&#xff09;是CSS3中具有颠覆性的特性之一&#xff0c;可以实现元素的位移、旋转、缩放等效果。 转…

技术引领,创邻科技Galaxybase亮相2023数据技术嘉年华

2023年4月7日-8日&#xff0c;由中国DBA联盟&#xff08;ACDU&#xff09;和墨天轮社区联合主办的第十二届『数据技术嘉年华』&#xff08;DTC2023&#xff09;在北京举办。本次大会以“开放融合数智化——引领数据技术发展&#xff0c;释放数据要素价值”为主题&#xff0c;从…

线下活动 | 探索现代服务业的人效提升之路

3月25日&#xff0c;盖雅搞得定系列活动-卓越管理闭门分享会圆满落幕。此次活动主题定为「探索服务业的人效提升之路」&#xff0c;20余位现代服务业企业代表参与了此次活动&#xff0c;共同探讨如何利用数字化工具赋能企业管理&#xff0c;促进人效提升。招商积余人力负责人谢…

仿函数详解

目录 1、函数对象 2、谓词 2.1、一元谓词&#xff08;谓词有一个参数&#xff09; 2.1.1、普通函数提供策略 2.1.2、仿函数&#xff08;上面的函数调用&#xff09;提供策略 2.1.3、一元谓词全部代码 2.1、二元谓词&#xff08;谓词有两个参数&#xff09; ​编辑 3、内…

Ansys Zemax | 如何模拟 LED 及其它复杂光源

概述 在使用非序列时&#xff0c;对照明系统进行精确模拟的第一步总是要正确建立光源模型。OpticStudio 提供了多种精确模拟光源的方法。这篇文章介绍了如何在非序列模式下使用径向光源 (Source Radial), 光源文件 (Source File) 以及通过建立其他复杂几何体&#xff0c;来对le…

Oracle与Mysql求连续天数的数据

问题&#xff1a;最近有开发需求&#xff0c;查询最近一个月连续天数>2的数据项&#xff0c;我这里数据库日期存储的是yyyymmdd&#xff0c;字符串 (可自行根据自身情况修改) 思路&#xff1a;如果可以找到连续日期的开始与结束时间&#xff0c;那么就可以 where 日期 betw…

D. Shortest Cycle(floyd求最小环)

Problem - D - Codeforces 给你n个整数a1,a2,..., ana1,a2,...,an。考虑n个节点的图&#xff0c;其中节点ii, jj (i≠ji≠j)是相连的&#xff0c;当且仅当&#xff0c;aiaiAND aj≠0aj≠0&#xff0c;其中AND表示位数和操作。 请找出该图中最短周期的长度&#xff0c;或确定它…

数据库锁表原因、排查、解决

数据库锁表原因、排查、解决 一.场景场景1场景2 二.原因三.排查四.解决方案 一.场景 场景1 锁表通常发生在DML&#xff08; insert 、update 、delete &#xff09; A操作进行全量数据同步&#xff0c;对整个表的粒度进行上锁&#xff0c;导致B操作只能等待A操作完成才能进入…

Vue中mixins(混入)的介绍和使用

什么是Mixin&#xff1f; 想要使用一个事物或者工具&#xff0c;我们首要先了解它是什么&#xff0c;这样我们才好对症下药。 其实Mixin不是Vue专属的&#xff0c;可以说它是一种思想&#xff0c;也可以说它就是混入的意思&#xff0c;在很多开发框架中都实现了Mixin(混入)&a…

我的第一本书终于要印刷了!

终于要印刷了 编辑发来了一个好消息&#xff0c;我的书最快下周就可以印刷出版了。 从开始动笔到提交第一稿&#xff0c;前后有1年的时间&#xff0c; 紧接着和出版社胡老师一起修改&#xff0c; 从一审、二审、三审&#xff0c; 到一校、二校、三校&#xff0c; 确认书…

MobileNetV3详细原理(含torch源码)

作者&#xff1a;爱笑的男孩。 个人简介&#xff1a;打工人。 持续分享&#xff1a;机器学习、深度学习、python相关内容、日常BUG解决方法及Windows&Linux实践小技巧。 如发现文章有误&#xff0c;麻烦请指出&#xff0c;我会及时去纠正。有其他需要可以私信我或者发我邮箱…

企业对外投资为何一定要申请境外投资备案?

随着贸易经济全球化的发展&#xff0c;国内外企业也纷纷把目标转向海外市场&#xff0c;尤其香港&#xff0c;日本&#xff0c;东南亚等地的投资有增无减。 境外投资备案&#xff0c;就是在中国境内设立的公司主体对中国以外的国家进行投资&#xff0c;需要在商务部和发改委进…