当前位置:首页 > 奇闻趣事

vue打包 Vuejs技术栈从CLI到打包上线实战全解析

前言

本文是我自己的vue项目实践的总结。对于Vue2及相关技术栈,实际使用的版本是2.3.3。

开发前关于vue-cli的注意事项

开发前至少要看一遍vue的官方文档和API(看官方文档是最重要的,比看50、100个博客要好)。建议阅读英文阅读能力好的英文文档,但中文文档会稍有落后,也要阅读相关的vue-router、axios、vuex等。

一般来说,我们首先使用vue-cli来构建项目的基本结构。

vue-cli的官方temaplte地址,我们选择webpack版本,建议查看其文档vue-web pack-样板了解基本用法和项目配置。

关于对网络包配置的深入理解,请参见网络包配置分析

为团队创建脚手架

虽然vue-cli功能强大,但是它有很多步骤供我们选择配置。其实公司业务的很多配置都是固定的。比如我们公司规定要装vue-router,要用标配的Eslint等等。,并且必须使用sass,因此NPM必须安装node-sass和sass-loader,并且还必须在vue-cli配置完成后安装axios。因此,我们不应该一步一步地选择vue-cli的配置,然后在每次构建新项目时安装sass。而是要根据公司自身情况搭建一个基于vue-cli的团队脚手架,整个项目只需要运行脚手架就可以初始化。

目录结构

建议在src/ directory中添加视图或页面目录,存储相应的路由组件,添加api目录,并根据项目情况添加过滤器、vuex等目录。组件目录存储公共组件或全局组件。每个组件目录都可以将图片等资源放在一起。建议将组件的子组件目录命名为子组件,并放在父组件目录下。例如,主组件目录是home/home.vue,子组件横幅路径是home/chldren/banner/banner.vue。

静态资源处理

vue-web pack-boile plate文档有静态资源处理的详细描述,但是发现很多人还不知道,这里就提一下。

在vue-web pack-boile plate的项目结构中,我们有两个静态资源目录:src/assets和static/

资产目录中的文件将由webpack处理,并且只支持相对路径形式。assets/logo.png将被编译成。/assets/logo . png/assets/logo . png不受支持

在js中,我们可以得到这样的文件资源路径

要求('。/assets/logo.png ')

以下带有~的前缀类似于require效果

<img src="~assets/logo.png">& ltimg src="~assets/logo.png">。

静态目录中的静态资源不会被webpack处理,所以适合放一些不需要webpack处理的外部资源,构建后的静态资源会放在这个目录中。

Vue组件化

关于vue组件化,360怪舞团的前端工程师pptVue.js写得很好,如何用Vue2.0开发丰富的交互WEB应用,这一节的内容也来自于此。Ppt提到了组件化带来的新问题:通信、复用、耦合,以及如何解决。

通信

1)道具和事件:道具放下,事件抬起

2)函数调用:this.refs

3)组件树:$父级。$parent

4)共享状态

5)eventbus

6)外部6)vue技术堆栈,如本地存储等

多路技术

1)冗余:如果、否则如果和否则判断执行不同的代码

if(this . type = = ' editing '){//某些编辑代码} else if(this . type = = ' preview '){//某些预览代码} else if(this . type = = ' present '){//某些当前代码} else { //某些基础代码}

2)包装:插槽

//plugin-page . vue & lt;div>。& ltslot name="page ">。我是一页& lt/slot>。& lt/div>。//present-plugin-page . vue & lt;div class="PresetPluginPage " >& ltplugin-page ref="page " >& ltp slot="page ">。我是当前页面& lt/p>。& lt/plugin-page>。& lt/div>。//输出& ltdiv class="PresetPluginPage " >& ltdiv>。& ltp>。我是当前页面& lt/p>。& lt/div>。& lt/div>。

3)继承:mixins

//定义一个mixin objectvar myMixin = { created:function(){ this . hello()},方法:{ hello:function(){ console . log(' hello from mixin!')} }}//定义一个使用这个mix invar Component = Vue . extend({ mixins:[Mymixin]})var Component = new Component()///-->的组件;"你好,米辛!"组件耦合

1)组件耦合引起的问题:

单个组件的修改很困难

组装新部件的困难

组件调试很困难

2)去耦

脱钩的本质是分离变化

首先,组件只有一个功能

//错误& ltcontrol-input type="number " >& lt/control-input >//右& lt控制号>号。& lt/control-number >

第二,采用稳定的接口

//错了这个。$parent。$parent。$refs['resource-image']。open()// rightbus。$emit('open-resource-image ')

第三,处理共享部分

bindEvents (remove) { let方法= remove?removeEventListener:“”AddEventListener“window[method](“resize”,this.handleResize)}

3)与服务器断开连接

这个。$http.get('/user/detail ')。然后(({body}) = >{ this.user = JSON.parse(body)。数据},err =>。{ console . error(err)})user . detail()。然后(detail = >;this.detail = detail)

服务器和前端系统是不同的

同步异步转换

多服务器/跨域代码

统一错误处理代码

vuex使用中的一些注意事项

1)不要滥用vuex

使用Vuex并不意味着需要把所有状态都放入Vuex。虽然把所有的状态放入Vuex会使状态的改变更加显式,更容易调试,但也会使代码变得繁琐和不直观。如果某些状态严格属于单个组件,那么最好将其用作组件的局部状态。您应该根据您的应用程序开发需求进行权衡和确定。

2)最好在根实例中注册store选项,它会被注入到根组件下的所有子组件中,子组件可以通过这个进行访问。$store。当有许多状态时,使用建议的mapState辅助功能。

3)polyfill

本项目使用Vuex,因此为了与IE9等较低版本兼容,必须引入polyfill-es6-promise of Promise。安装NPM后,在main.js:

axios导入导入开发常见问题' es6-承诺/自动'

为了与后端数据进行交互,我们通常会引入axios库。如下添加到main.js中vue的原型中,这样就可以通过这个获得axios了。组件中的$http:

object . define property(vue . prototype,' $ http ',{value: axios})//或object . define property(vue . prototype,' $ axios ',{ value:axios })

这种做法没有采用这种方法,而是创建了一个用于统一管理的getData.js:

从' axios ' const GetSamPle =(param 1,param2) = >导入axios。axios.get(url,{ params: { param1: param1,param2: param2 }})导出{ GetSession }

在单个文件组件中,可以再次调用导入getSomething方法。

介绍图标字体

直接在main.js中导入你下载的iconfont.css

js中的判断环境

共同的要求是开发环境应该是控制台,但在线环境不应该是控制台。有三种默认环境:“开发”、“生产”和“测试”。

if (process.env.NODE_ENV!= = ' production '){ console . log(data)}设置数据模拟请求Mock

数据模拟请求使用Mock.js来配置文档,但这只是一个简单的数据模拟,并没有生成文档。Ali RAP可以用于文档、mock.js、可视化、Rest、接口转换、文档修改提醒、本地部署支持等更全面的功能。

安装npm install mockjs后,可以在/src/api目录中创建新的data.js并导入mockjs。然后可以根据开发环境在程序入口或者api入口导入data.js。以下是几个例子:

从' mock js '导入mock让data = mock . mock({ ' list | 1-10 ':[{ ' id |+1 ':1 }]})//mock a data console . log(JSON . strict(data,null,4)从' mock js' mock.setup导入mock({ time out:' 300‐500 ' })mock .//log in/,{ code:0 })//拦截登录请求。返回对象{代码:0}从' mock js ' mock . setup({ time out:' 300‐500 ' })mock . mock(sitemap . CMS . bangs,{ results:[]})//截取sitemap中的CMS . bang请求并返回对象

您可以使用服务器端渲染或预渲染来预渲染webpack插件的github地址。

Webpack

在实际项目中,修改webpack的配置是不可避免的。如果不知道怎么改,可以查看webpack的配置分析进行修改。

配置全局变量

要设置全局变量,可以在build中的webpack.base.conf.js中配置externals,这与模块的级别相同:

外部:{ sitemap: 'sitemap'}

然后在模块中添加这样的配置。

全局:{'sitemap': false}根据不同的环境加载不同的js

在这个项目中,应该根据不同的环境(开发环境、测试环境和生产环境)加载不同的sitemaps.js。这个sitemap.js将公开一个全局sitemap变量,它是一个由api地址组成的json对象。使用HtmlWebpackPlugin插件的选项选项来实现。

用index.html写这个:

& ltsrc="<。% = HTMlWebPackplugin . options . src % & gt;">。& lt/>。

然后在build中的conf.js的HtmlWebpackPlugin中设置不同的src,比如在开发环境中添加src:

新的html webpackplugin({ filename:' index.html ',模板:' index . html ',src:'//dev . example . com/API/sitemap . js ',inject: true})配置别名

在webpack.base.conf.js中,vue-cli已经默认将src目录的别名配置为@了。建议配置src以下目录的别名,这样可以减少重复写,更美观。添加src、页面和组件的别名,如下所示:

解析:{扩展:['。js ','。vue ','。json'],别名:{ 'vue$': 'vue/dist/vue.esm.js ',' @': resolve('src '),' src': resolve('src '),Pages ':path . resolve(_ dirname ')../src/pages '),' components ':path . resolve(_ dirname,'../src/components')}}图像压缩

您可以使用webpack插件image-webpack-loader来压缩和处理图像。

多页

其实就是添加多个条目js,然后修改相应的配置。网上有很多信息,搜索一下就知道了。

eslint

有时我们需要关闭一些代码检查。具体配置请参见配置ESLint-ESLint中文。以下是两个常见的例子:

1)关闭eslint

/* ESL int-disable */alert(' foo ')/* ESL int-enable */

2)关闭新的禁令

/* ESL int-禁用no-new */优化和其他优化

1)因为vue跟踪对象变化的原理是基于Object.defineProperty的使用,当处理大量数据而不跟踪对象变化时,对象可以被Object.freeze(数据)冻结,以优化数据渲染处理

2)vue-router路由延迟加载。当应用程序被打包和构建时,java包将变得非常大,这将影响页面加载。如果能把不同路由对应的组件分成不同的代码块,然后在访问路由时加载对应的组件,效率会更高。

其他的

1)使用表驱动的方法注册全局过滤器和指令,比如在src下创建一个新的过滤器目录,在index.js中导入所有的全局过滤器:

从“”导入毫格式。/milliFormat“从反向导入”。/reverse '导出默认值{ milliFormat,reverse}

然后在main.js中注册

从“”导入公共过滤器。/filters/index ' object . key(common filtes)。forEach(键= >;Vue.filter(key,commonFiltes[key])

2)对于一些强耦合的组件,比如collapse和collapse-item,可以使用$parent和$children进行通信。不需要像elementUI那样实现组件的广播和调度。我还发现UI库实际上是用总线进行通信的,导致同一页面出现两个折叠,会互相影响。

3)在根组件上注册了公共过滤器之后,除了在“小胡子”语法中使用之外,还可以通过这个获得组件中的datetime过滤器。$ root。$ options.filters.datetime(数据)。

在线包装优化分析

npm运行构建报告分析包的大小,并直观地看到需要优化的地方。

测试生成文件

成功构建后,会有一个提示提示,提示您构建的文件需要部署在http服务器上,不能通过文件协议打开。

我们可以通过节点静态启动服务。您可以编写一个js配置文件从节点开始,或者在CLI中输入static dist(先安装node-static):

$ static distserving " dist " http://127 . 0 . 0 . 1:8080

有关更多信息,如设置端口,请单击上面的链接查看文档。

附言

本文最重要的是文中给出的一些链接,尤其是前期开发通知部分的链接,所以最好点进去通读。

途经:http://www.cnblogs.com/ang-/p/7082202.html

1.《vue打包 Vuejs技术栈从CLI到打包上线实战全解析》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。

2.《vue打包 Vuejs技术栈从CLI到打包上线实战全解析》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。

3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/guonei/1238923.html

上一篇

温带海洋性气候成因 【备考冲刺】关于气候特点及成因的87个问答题,这里全了!

下一篇

年轻人热衷"玄学" 星座博主拥有数千万粉丝 登上网络热搜了!

夜夜天天鲁夜夜爱2018 《2018天天诗历》目录及后记

夜夜天天鲁夜夜爱2018 《2018天天诗历》目录及后记

有种温暖 每个故事都有人听过 有一种美 每天都伴随着诗歌 ↓  “2018日常诗歌日历”目录...

代码混淆 Android Studio 代码混淆

代码混淆 Android Studio 代码混淆

著作者 这篇文章是由两点水提交的,博客地址:http://www.apkbus.com/myspaceblog-911082.html 前言 今天包装新产品的时候,突然忘了混淆的参数怎么写了。虽然之前很迷茫,但是具体的配置参数代码不记得了,所以...

永中官网 永中DCS“在线文档编辑”功能让文档编辑更便捷

在一些学校的官网网站上,我们经常可以看到一些以附件形式悬挂的通知或申请表格等文件。当我们需要处理一些事情时,我们可能需要填写这些材料。此时,我们可以直接从网站下载文档并填写。最后,我们将下载完成的文档并交给相关人员。然而,随着互联网的发展,这个...

固定资产分类与代码 【动态】卫生计生行业固定资产分类与代码试点启动

卫生计生行业固定资产分类编码试点工作会议近日在北京召开,启动了行业固定资产分类编码试点工作。试点工作完成后,国家卫生计生委将在委预算单位组织实施这套分类编码,并与“资产管理信息系统”预设编码有效衔接,积极推进卫生计生行业固定资产分类编码标准的建...

无锡尚德太阳能电力有限公司 无锡尚德太阳能电力有限公司荣获2019年“光能杯”光伏行业评选2019年度最具影响力组件企业

无锡尚德太阳能电力有限公司 无锡尚德太阳能电力有限公司荣获2019年“光能杯”光伏行业评选2019年度最具影响力组件企业

2020年3月31日,由索比光伏网和智信咨询共同主办的2019“太阳能杯”光伏产业颁奖典礼圆满落幕。本届“光能杯”企业报名规模再创新高,已有200多家企业报名参选。无锡尚德电力有限公司以其强大的创新能力、卓越的质量和服务以及卓越的品牌影响力,获...

无锡尚德太阳能 无锡尚德太阳能电力有限公司荣获2019年“光能杯”光伏行业评选2019年度最具影响力组件企业

无锡尚德太阳能 无锡尚德太阳能电力有限公司荣获2019年“光能杯”光伏行业评选2019年度最具影响力组件企业

2020年3月31日,由索比光伏网和智信咨询共同主办的2019“太阳能杯”光伏产业颁奖典礼圆满落幕。本届“光能杯”企业报名规模再创新高,已有200多家企业报名参选。无锡尚德电力有限公司以其强大的创新能力、卓越的质量和服务以及卓越的品牌影响力,获...

英利绿色能源控股有限公司 英利绿色能源控股有限公司荣获2019年“光能杯”光伏行业评选2019年度最具影响力组件企业

英利绿色能源控股有限公司 英利绿色能源控股有限公司荣获2019年“光能杯”光伏行业评选2019年度最具影响力组件企业

2020年3月31日,由索比光伏网和智信咨询共同主办的2019“太阳能杯”光伏产业颁奖典礼圆满落幕。本届“光能杯”企业报名规模再创新高,已有200多家企业报名参选。英利绿色能源控股有限公司以其强大的创新力、卓越的品质和服务、卓越的品牌影响力,获...

安徽省国家税务总局 国家税务总局安徽省税务局关于发布继续执行的税收规范性文件目录的公告

国家税务总局安徽省税务局关于发布继续实施税收规范性文件目录的公告 国家税务总局安徽省税务局公告2018年第3号 根据《税收规范性文件制定管理办法》(国家税务总局令第41号),根据国家税务总局关于国税和地税征管体制改革的有关要求,现将继续执行的税...