Vue-模块化 2

简介: Vue-模块化

4、webpack中loader的使用

前面介绍了webpack,使用webpack主要是模块化开发我们的代码并且webpack还会自动处理模块之间的依赖。但是前端项目中还需要其他文件,例如css、图片,也包括将一些高级的ES6语法转化成ES5语法、vue文件转换成js文件等,对webpack本身来讲这些转化他本身是不支持的此时就需要给webpack安装扩展功能loader。  

4.1 css-loader和style-loader的使用

不同的loader负责处理不同的格式,需要某个loader时要使用npm将loader下载下来,然后在webpack.config.js文件中的modules关键字下进行配置。

假设项目中存在css文件:

我们知道要想使该css文件生效的话需要在index.html文件中中引用该css文件,但是需要注意的是大型项目中的css样式有上百个难道需要我们一个一个引用吗?当然不是我们需要将css文件模块化引入到打包文件 bundle.js文件中。但是在当前项目中入口文件main.js中没有引入css文件,所以使用指令npm run build 并不能将css文件打包到bundle.js文件中。只要将css模块引入到main.js文件中就能将css样式引用:

然后就要将main.js文件打包,那么webpack既然处理不了css文件,那处理css文件的loader是哪个呢?给出官网地址,可以在中文官网找到答案:

loaders | webpack 中文网 (webpackjs.com)

带你进去之后会有详情的下载步骤,这里要注意的是,在本项目中我的webpack版本是5.0.0。因为安装3.6.0的版本css loader 和style loader 安装不上。

4.2 less-loader的使用

less文件要想被项目加载就需要引入到项目的入口文件main.js中。本质上lessloader的作用是将less文件转换成css文件

1. /*引入less文件*/
2. require('./css/special.less')

使用指令npm install --save-dev less-loader less 加载lessloader,然后在webpack.config.js文件中添加相关配置, 再进到项目中执行打包指令:   npm run build,即可。

4.3 url-loader、file-loader

在css文件中使用图片时也需要下载图片的loader,也就是url-loader@1.1.2,下载完后还需要在配置文件中添加相关配置:

module: {
    rules: [
      {
        test: /\.(png|jpg|gif)$/,
        use: [
          {
            loader: 'url-loader',
            options: {
              /*当图片的大小小于limit(KB)时会使用url-loader将图片编译成base64的字符串形式*/
                            limit: 70000
                            /*当图片的大小大于limit时,会使用file-loader对图片进行加载。使用file-loader
                            * 不需要进行配置只需下载file-loader即可*/
            }
          }
        ]
      }
    ]
  }

然后需要进行重新打包:npm run build

运行index.html文件:

当图片的大小大于limitKB时需要加载file-loader@3.0.1,然后将文件重新打包。

4.4 babel-loader

转成ES5的原因是现在很多的浏览器不支持ES6的语法(chrom支持),为了让更多浏览器兼容项目,需要使用babel-loader,首先需要在配置文件中添加配置:

 {
                test: /\.js$/,
                exclude: /(node_modules|bower_components)/,
                use: {
                    loader: 'babel-loader',
                    options: {
                        presets: ['es2015']
                    }
                }
            }

然后在终端使用指令:npm install --save-dev babel-loader@7  babel-core babel-preset-es2015


然后重新打包运行,观察dist文件夹下面的bundle.js文件发现变成ES5的语法格式。

5、webpack中配置Vue

如果在项目中想使用vue的话需要添加vue的依赖,之前使用<scprit>标签引用的vue不是模块化管理的vue。在引入模块化思想之后需要使用npm安装:npm install vue@2.5.21 --save   因为整个项目都是使用vue所以不需要加--dev 然后在配置文件中添加resove属性:

 resolve:{
        alias:{
            "vue$":'vue/dist/vue.esm.js'
        }
    }

完成上述的配置之后就能使用了:

6、el和template的区别

在实际的开发中index.html文件是不会修改的也就是说index.html文件只是负责引入bundle.js文件和编写vue实例挂载的对象。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<!--
vue挂载的对象
-->
<div id="app">
</div>
<!--
引入bundle.js文件
-->
<script src="./dist/bundle.js"></script>
</body>
</html>

如果相使用vue实例内部的数据的话该怎么写呢?需要写在vue的template和属性中。最后编译的时候会将index.html文件中的<div></div>替换成template中的内容:

/*引入vue*/
import Vue from 'vue'
const app = new Vue({
    el:"#app",
    template:`
      <div>
        <p>{{message}}</p>
      </div>
    `,
    data:{
        message:"哈哈"
    }
})

重新打包运行:

查看编译后的代码:

发现之前的<div id='app'></div>被替换了~

结论:vue实例中的template会在编译的时候替换el

但是假设vue实例中的template代码很多呢?写在template中就不合适了,就需要抽取。

也就是将模板抽取成模板对象,在vue实例中注册模板对象。代码如下:

/*组件*/
const APP = {
    template:`
      <div>
        <p>{{message}}</p>
      </div>
    `,
    data(){
       return{
           message: "KJHJADGFLASGKJHFLASJKDFHASKJDLFHLJKSADF"
       }
    }
}
/*引入vue*/
import Vue from 'vue'
const app = new Vue({
    el:"#app",
    template:'<APP/>',
    /*注册组件*/
    components:{
        APP
    }
})

进一步抽取,我们将组件抽取到转门写vue的文件夹vue中文件的名字叫app.js。

重新将项目打包运行即可。

但是在app.js中模板代码和js代码仍然 没有分离因此需要对模板再进行抽取。所以现在需要在vue文件夹下创建文件App.vue。但是在创建App.vue文件时需要加载loader文件:npm install vue-loader@13.0.0 vue-template-compiler@2.5.21 --save-dev

还要在配置文件中的module中添加相关配置如下:

在main.js文件中导入App.vue文件并打包运行即可。

注意:

相关文章
|
3天前
|
JavaScript 前端开发
如何在 Vue 项目中配置 Tree Shaking?
通过以上针对 Webpack 或 Rollup 的配置方法,就可以在 Vue 项目中有效地启用 Tree Shaking,从而优化项目的打包体积,提高项目的性能和加载速度。在实际配置过程中,需要根据项目的具体情况和需求,对配置进行适当的调整和优化。
|
4天前
|
存储 缓存 JavaScript
在 Vue 中使用 computed 和 watch 时,性能问题探讨
本文探讨了在 Vue.js 中使用 computed 计算属性和 watch 监听器时可能遇到的性能问题,并提供了优化建议,帮助开发者提高应用性能。
|
4天前
|
存储 缓存 JavaScript
如何在大型 Vue 应用中有效地管理计算属性和侦听器
在大型 Vue 应用中,合理管理计算属性和侦听器是优化性能和维护性的关键。本文介绍了如何通过模块化、状态管理和避免冗余计算等方法,有效提升应用的响应性和可维护性。
|
4天前
|
存储 缓存 JavaScript
Vue 中 computed 和 watch 的差异
Vue 中的 `computed` 和 `watch` 都用于处理数据变化,但使用场景不同。`computed` 用于计算属性,依赖于其他数据自动更新;`watch` 用于监听数据变化,执行异步或复杂操作。
|
3天前
|
JavaScript 前端开发 UED
vue学习第二章
欢迎来到我的博客!我是一名自学了2年半前端的大一学生,熟悉JavaScript与Vue,目前正在向全栈方向发展。如果你从我的博客中有所收获,欢迎关注我,我将持续更新更多优质文章。你的支持是我最大的动力!🎉🎉🎉
|
5天前
|
存储 JavaScript 开发者
Vue 组件间通信的最佳实践
本文总结了 Vue.js 中组件间通信的多种方法,包括 props、事件、Vuex 状态管理等,帮助开发者选择最适合项目需求的通信方式,提高开发效率和代码可维护性。
|
3天前
|
JavaScript 前端开发 开发者
vue学习第一章
欢迎来到我的博客!我是瑞雨溪,一名热爱JavaScript和Vue的大一学生。自学前端2年半,熟悉JavaScript与Vue,正向全栈方向发展。博客内容涵盖Vue基础、列表展示及计数器案例等,希望能对你有所帮助。关注我,持续更新中!🎉🎉🎉
|
5天前
|
存储 JavaScript
Vue 组件间如何通信
Vue组件间通信是指在Vue应用中,不同组件之间传递数据和事件的方法。常用的方式有:props、自定义事件、$emit、$attrs、$refs、provide/inject、Vuex等。掌握这些方法可以实现父子组件、兄弟组件及跨级组件间的高效通信。
|
10天前
|
JavaScript
Vue基础知识总结 4:vue组件化开发
Vue基础知识总结 4:vue组件化开发
|
10天前
|
存储 JavaScript
Vue 状态管理工具vuex
Vue 状态管理工具vuex