前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Vue-cli解析

Vue-cli解析

作者头像
企鹅号小编
发布于 2018-01-26 08:07:13
发布于 2018-01-26 08:07:13
1.1K0
举报
文章被收录于专栏:编程编程

前言

这段时间,算是空出手来写几篇文章了。由于很久都没有时间整理现在所用的东西了,所以,接下来会慢慢整理出一些文档来记录前段时间的工作和生活。

正文

首先,我们来说一下安装的东西吧!处于有头有尾的目的,还是几句话草草了事。步骤如下:

安装vue-cli

以webpack模版安装目录

这样之后,我们就可以使用IDE打开目录了。

此处注明我的vue-cli的版本2.9.2,以免之后改版之后,误导读者。

之后,附上自己的目录截图,并没有做改动,如图:

'use strict'

constpath=require('path')

constutils=require('./utils')

constconfig=require('../config')

constvueLoaderConfig=require('./vue-loader.conf')

分别是:

path路径

这个模块可以看nodejs官网的介绍,其实,就是一个文件路径的获取和设置等模块,学习node的时候,我们往往会看到这个模块被大量运用。

path模块提供了用于处理文件和目录路径的使用工具

utils.js

我们可以到其中去看一下代码,其实光从名字上我们可以推断出,它可能是为整个脚手架提供方法的。我们可以先来看一下头部引用的资源文件:

constpath=require('path')

constconfig=require('../config')

constExtractTextPlugin=require('extract-text-webpack-plugin')

constpackageConfig=require('../package.json')

同样的,它也引用了path模块和config目录中的index.js文件,之后的话是一个npm包——extract-text-webpack-plugin。这个包的话,是用来分离css和js的内容的。后续我们可以详细了解一下。同时,它还引用的package.json文件,这是一个json文件,加载过来之后,会变成一个对象。

所以,我们需要从它的头部依赖开始说起:

path模块我们之前提到过,这里就不细说。我们可以来分析一下config目录下的index.js文件。

index.js

这个文件中,其实有十分充足的代码注释,我们也可以来深入探究一下。

从代码中,我们可以看到通过module.exports导出了一个对象,其中包含两个设置dev和build。

在dev中,设置了一些配置,代码如下:

modules.exports={dev:{//PathsassetsSubDirectory:'static', assetsPublicPath:'/', proxyTable:{},//Various Dev Server settingshost:'localhost',//can be overwritten by process.env.HOSTport:8080,//can be overwritten by process.env.PORT, if port is in use, a free one will be determinedautoOpenBrowser:false, errorOverlay:true, notifyOnErrors:true, poll:false,//https://webpack.js.org/configuration/dev-server/#devserver-watchoptions-//Use Eslint Loader?//If true, your code will be linted during bundling and//linting errors and warnings will be shown in the console.useEslint:true,//If true, eslint errors and warnings will also be shown in the error overlay//in the browser.showEslintErrorsInOverlay:false,/*** Source Maps*///https://webpack.js.org/configuration/devtool/#developmentdevtool:'eval-source-map',//If you have problems debugging vue-files in devtools,//set this to false - it *may* help//https://vue-loader.vuejs.org/en/options.html#cachebustingcacheBusting:true,//CSS Sourcemaps off by default because relative paths are "buggy"//with this option, according to the CSS-Loader README//(https://github.com/webpack/css-loader#sourcemaps)//In our experience, they generally work as expected,//just be aware of this issue when enabling this option.cssSourceMap:false, } }

通过它的注释,我们可以理解它在dev中配置了静态路径、本地服务器配置项、Eslint、Source Maps等参数。如果我们需要在开发中,改动静态资源文件、服务器端口等设置,可以在这个文件中进行修改。

下面还有一个build的对象,它是在vue本地服务器启动时,打包的一些配置, 代码如下:

build:{//Template for index.htmlindex:path.resolve(__dirname,'../dist/index.html'),//PathsassetsRoot:path.resolve(__dirname,'../dist'), assetsSubDirectory:'static', assetsPublicPath:'/',/*** Source Maps*/productionSourceMap:true,//https://webpack.js.org/configuration/devtool/#productiondevtool:'#source-map',//Gzip off by default as many popular static hosts such as//Surge or Netlify already gzip all static assets for you.//Before setting to `true`, make sure to://npm install --save-dev compression-webpack-pluginproductionGzip:false, productionGzipExtensions:['js','css'],//Run the build command with an extra argument to//View the bundle analyzer report after build finishes://`npm run build --report`//Set to `true` or `false` to always turn it on or offbundleAnalyzerReport:process.env.npm_config_report}

其中包括模版文件的修改,打包完目录之后的一些路径设置,gzip压缩等。明白了这些字段的意思之后,就可以在之后的开发中,主动根据项目需求,改动目录内容。

聊完config下的index.js文件,回到utils.js文件中,我们可以来看几个其中的方法,来分析它们分别起到了什么作用。

assetsPath方法

接受一个_path参数

返回static目录位置拼接的路径。

它根据nodejs的proccess.env.NODE_ENV变量,来判断当前运行的环境。返回不同环境下面的不同static目录位置拼接给定的_path参数。

cssLoaders方法

接受一个options参数,参数还有的属性:sourceMap、usePostCSS。

同时,这里用到了我们之前提到的extract-text-webpack-plugin插件,来分离出js中的css代码,然后分别进行打包。同时,它返回一个对象,其中包含了css预编译器(less、sass、stylus)loader生成方法等。如果你的文档明确只需要一门css语言,那么可以稍微清楚一些语言,同时可以减少npm包的大小(毕竟这是一个令人烦躁的东西)。

styleLoaders方法

接受的options对象和上面的方法一致。该方法只是根据cssLoaders中的方法配置,生成不同loaders。然后将其返回。

createNotifierCallback方法

此处调用了一个模块,可以在GitHub上找到,它是一个原生的操作系统上发送通知的nodeJS模块。用于返回脚手架错误的函数

一共这么四个函数方法,在utils中被定义到。

这个文件中的代码非常的少,我们可以直接贴上代码,然后来分析,其中的作用。代码如下:

'use strict'

constutils=require('./utils')

constconfig=require('../config')

constisProduction=process.env.NODE_ENV==='production'

constsourceMapEnabled=isProduction?config.build.productionSourceMap:config.dev.cssSourceMap

module.exports={ loaders:utils.cssLoaders({ sourceMap:sourceMapEnabled, extract:isProduction }), cssSourceMap:sourceMapEnabled, cacheBusting:config.dev.cacheBusting, transformToRequire:{ video:['src','poster'], source:'src', img:'src', image:'xlink:href'}}

其中,主要就是根据NODE_ENV这个变量,然后分析是否是生产环境,然后将根据不同的环境来加载,不同的环境,来判断是否开启了sourceMap的功能。方便之后在cssLoaders中加上sourceMap功能。然后判断是否设置了cacheBusting属性,它指的是缓存破坏,特别是进行sourceMap debug时,设置成false是非常有帮助的。最后就是一个转化请求的内容,video、source、img、image等的属性进行配置。

具体的还是需要去了解vue-loader这个webpack的loader加载器。

其实的两个方法,其中一个是来合并path路径的,另一个是加载Eslint的rules的。

我们直接看后面那个函数,createLintingRule方法:

其中,加载了一个formatter,这个可以在终端中显示eslint的规则错误,方便开发者直接找到相应的位置,然后修改代码。

之后的一个对象,就是webpack的基础配置信息。我们可以逐一字段进行分析:

context => 运行环境的上下文,就是实际的目录

entry => 入口文件:src下的main.js文件

output => 输出内容,这内部的配置会根据不同的运行环境来进行变化

resolve => 其中的extensions字段,指定检测的文件后缀,同时alias是用于指定别名的。在引用文件路径中,如果有别名的符号,会被替换成指定的路径。

module => 配置了一些eslint、vue、js、图片资源、字体图标、文件等加载的loader。详细的可以去看webpack的官方网站。

node => 此处部分有注释,主要是阻止一些webpack的默认注入行为,因为在vue中,已经具备了这些功能。

这个文件中,引用了webapck-merge这npm包,它可以将两个配置对象,进行合并。代码如下:

constmerge=require('webpack-merge');

constdevWebpackConfig=merge(baseWebpackConfig, {

...

})

这样就合并了base中的webpack配置项。之后,我们可以来看一下dev环境中的新增了那些配置项,它们分别起到了什么作用?

首先,在module的rules中增加了cssSourceMap的功能

然后就是devtools,通过注释的英文翻译,可以知道cheap-module-eval-source-map使得开发更快。

之后,就是devSever的一些配置项了。其中包块客户端报错级别、端口、host等等

还有新增的plugins,我们可以来看一下实际新增的plugins(具体可以看webpack文档):

定义process.env

HotModuleReplacementPlugin: 模块热替换插件

NameModulesPlugin: 显示模块加载相对路径插件

NoEmitOnErrorsPlugin: 在编译出现错误时,使用 NoEmitOnErrorsPlugin 来跳过输出阶段。这样可以确保输出资源不会包含错误

HtmlWebpackPlugin: 使用插件生成一个指定的模版。

之后,还有一个函数,确保启动程序时,如果端口被占用时,会通过portfinder来发布新的端口,然后输出运行的host字符串。

新增了output的配置,我们可以看到它在output中新增了一些属性,将js打包成不同的块chunk,然后使用hash尾缀进行命名

添加了一些插件:

UglifJsPlugin: 这个是用来丑化js代码的

ExtractTextplugin: 这里新增了一些属性,在打包的css文件也增加了块和hash尾缀

OptimizeCssplugin: 这里是来优化css文件的,主要就是压缩css代码

HashedModuleIdsPlugin: 保证module的id值稳定

optimize: 这里是webpack一系列优化的措施,具体可以逐一查看官方文档

CopyWebPlugins: 自定义assets文件目录

如果没有进行gzip压缩,调用CompressionWebpackPlugin插件进行压缩

这样,我们的webpack配置文件内容基本上就全部看完了。或许,会有点蒙,还是看官方文档来的实在。

最后,还需要分析一个build.js文件。

build.js

这个文件是在打包的时候,会被用到的。

首先,文件的开头请求了check-version.js中的函数,然后确定了一下node和npm的版本。相对于较低版本的node和npm,在打包过程中,会产生警告。之后,设置环境参数,设置成生产环境,之后就是一系列打包的流程。

总结

本篇文章,主要总结了一下vue-cli生成的文件中,其中的一些配置参数和文件大致的作用。有不到位的地方,希望大家可以指正。同时希望我们共同进步,共勉。

如果你对我写的有疑问,可以评论,如我写的有错误,欢迎指正。你喜欢我的博客,请给我关注Star~呦github博客

本文来自企鹅号 - zimo前端小窝媒体

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文来自企鹅号 - zimo前端小窝媒体

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Python可以比C++更快,你不信?
Python 是一个用途非常广泛的编程语言,拥有成千上万的第三方库,在人工智能、机器学习、自动化等方面有着广泛的应用,众所周知,Python 是动态语言,有全局解释器锁,比其他静态语言要慢,也正是这个原因,你也许会转向其他语言如 Java、C++,不过先等等,今天分享一个可以让 Python 比 C++ 还要快的技术,看完再决定要不要转吧。
somenzz
2021/04/16
9860
利用numba給Python代码加速 [1]
Numba @jit 装饰器有两种编译模式, Nopython 模式和Object 模式。nopython编译模式的行为本质上是编译修饰后的函数,使其完全运行而不需要Python解释器的参与。这是使用Numba jit装饰器的推荐和最佳实践方法,因为它可以获得最佳性能。@jit(nopython=True) 等效于@njit()。
用户6021899
2022/01/10
1.6K0
利用numba給Python代码加速 [1]
嫌Python太慢但又不想学C/C++?来了解下JIT技术
Python 是门多才多艺的语言,既可以写后端,也可以做数据分析,既可以智能化运维,也可以搞渗透,既可以写爬虫,又可以做机器学习深度学习。然而,Python 的缺点也很明显,它的速度有点慢。
实验盒
2021/09/22
1.1K0
嫌Python太慢但又不想学C/C++?来了解下JIT技术
利用numba給Python代码加速 [2]
Numba 的 @vectorize 装饰器可以将以标量为输入的的python函数编译为类似Numpy的 ufuncs。创建一个传统的NumPy ufunc并不是最简单的过程,它可能需要编写一些C代码。Numba让这很容易。使用@vectorize装饰器 ,Numba可以将纯Python函数编译成ufunc,该ufunc在NumPy数组上运行的速度与用C编写的传统ufunc一样快。
用户6021899
2022/01/10
9170
利用numba給Python代码加速 [2]
Python 提速大杀器之 numba 篇
你是不是曾经有这样的苦恼,python 真的太好用了,但是它真的好慢啊(哭死) ; C++ 很快,但是真的好难写啊,此生能不碰它就不碰它。老天啊,有没有什么两全其美的办法呢?俗话说的好:办法总是比困难多,大家都有这个问题,自然也就有大佬来试着解决这个问题,这就请出我们今天的主角: numba
OpenMMLab 官方账号
2022/01/18
3K0
推荐 8 个炫酷的 Python 装饰器!
Python 编程语言的一大优点是它把所有功能都打包到一个小包中,这些功能非常有用。
Python编程与实战
2021/10/12
1.3K0
用 Numba 加速 Python 代码,变得像 C++ 一样快
注意: 这篇文章的 Jupyter Notebook 代码在我的 Github 上:SpeedUpYourAlgorithms-Numba
昱良
2019/07/04
2.8K0
用 Numba 加速 Python 代码,变得像 C++ 一样快
Python | 加一行注释,让你的程序提速10+倍!numba十分钟上手指南
之前的文章《源代码如何被计算机执行》已经提到计算机只能执行二进制的机器码,C、C++等编译型语言依靠编译器将源代码转化为可执行文件后才能运行,Python、Java等解释型语言使用解释器将源代码翻译后在虚拟机上执行。对于Python,由于解释器的存在,其执行效率比C语言慢几倍甚至几十倍。
PP鲁
2019/12/26
7.6K0
让python快到飞起-numba加速
python是一门高效动态编程语言,由于其采用简洁明了的语法以及灵活性深受大家欢迎。但是,这既是它最大的优势,也是最大的劣势。它的灵活性和无类型的高级语法可能会导致数据和计算密集型程序的性能不佳,因为运行本地编译代码要比运行动态解释代码快很多倍。
自学气象人
2022/11/02
9190
让python快到飞起-numba加速
使用numba加速python科学计算
python作为一门编程语言,有非常大的生态优势,但是其执行效率一直被人诟病。纯粹的python代码跑起来速度会非常的缓慢,因此很多对性能要求比较高的python库,需要用C++或者Fortran来构造底层算法模块,再用python进行上层封装的方案。在前面写过的这篇博客中,介绍了使用f2py将fortran代码编译成动态链接库的方案,这可以认为是一种“事前编译”的手段。但是本文将要介绍一种即时编译(Just In Time,简称JIT)的手段,也就是在临近执行函数前,才对其进行编译。以下截图来自于参考链接4,讲述了关于常见的一些编译场景的区别:
DechinPhy
2021/05/21
2K0
这一行代码,能让你的 Python 运行速度提高 100 倍!
python一直被病垢运行速度太慢,但是实际上python的执行效率并不慢,慢的是python用的解释器Cpython运行效率太差。
杰哥的IT之旅
2020/09/30
6710
用Numba加速Python代码
说这句话的人也没有错。与许多其他编程语言相比,Python很慢。Benchmark game有一些比较不同编程语言在不同任务上的速度的可靠的基准。
AiTechYun
2019/07/04
2.2K0
Run python on a supercomputer
有任务需要处理一堆收集来得开源数据集,在服务器单机跑了一天才给结果,多方咨询有HPC可以用,或者叫supercomputer,或者叫计算机集群,大部分的简称grid。看了wiki、confluence,给出一堆链接在脑海中织出密密麻麻的蜘蛛网——无从下手。居然没有use case出发端到端的参考demo,真是无力吐槽。自力更生求助google,youtube,stack overflow,梳理下来,简而言之,可以理解分而治之多线程的多处理核(cpu/gpu)的版本,涉及算力资源调度引入slurm,涉及通讯引入mpi。
flavorfan
2021/01/31
2.2K0
Run python on a supercomputer
超过Numpy的速度有多难?试试Numba的GPU加速
Numpy是在Python中非常常用的一个库,不仅具有良好的接口文档和生态,还具备了最顶级的性能,这个库很大程度上的弥补了Python本身性能上的缺陷。虽然我们也可以自己使用Cython或者是在Python中调用C++的动态链接库,但是我们自己实现的方法不一定有Numpy实现的快,这得益于Numpy对于SIMD等技术的深入实现,把CPU的性能发挥到了极致。因此我们只能考虑弯道超车,尝试下能否用自己实现的GPU的算法来打败Numpy的实现。
DechinPhy
2021/08/31
2.4K0
超过Numpy的速度有多难?试试Numba的GPU加速
一行代码让你的python运行速度提高100倍
python一直被病垢运行速度太慢,但是实际上python的执行效率并不慢,慢的是python用的解释器Cpython运行效率太差。
小小詹同学
2019/11/12
9310
numba,让你的Python飞起来!
python由于它动态解释性语言的特性,跑起代码来相比java、c++要慢很多,尤其在做科学计算的时候,十亿百亿级别的运算,让python的这种劣势更加凸显。
派大星的数据屋
2022/04/02
1.2K0
numba,让你的Python飞起来!
numba,让你的Python飞起来!
python由于它动态解释性语言的特性,跑起代码来相比java、c++要慢很多,尤其在做科学计算的时候,十亿百亿级别的运算,让python的这种劣势更加凸显。
Python进阶者
2019/09/17
1.3K0
numba,让你的Python飞起来!
强化学习技巧五:numba提速python程序
numba是一款可以将python函数编译为机器代码的JIT编译器,经过numba编译的python代码(仅限数组运算),其运行速度可以接近C或FORTRAN语言。
汀丶人工智能
2022/12/21
1K0
强化学习技巧五:numba提速python程序
Python Numpy性能提升的利器Numa优化技巧
在数据分析和科学计算中,Python和Numpy是非常流行的工具组合。然而,随着数据量的增加,Python解释器在处理大规模数组时的性能可能无法满足需求。为了提升Python代码的执行效率,Numba成为了一个强大的工具。Numba是一个基于LLVM的即时编译器,它可以将Python代码编译为高效的机器代码,从而极大地提升Numpy数组操作的性能。
sergiojune
2024/10/21
2090
Python Numpy性能提升的利器Numa优化技巧
[Python技巧]如何加快循环操作和Numpy数组运算速度
在 24式加速你的Python中介绍对循环的加速方法中,一个办法就是采用 Numba 加速,刚好最近看到一篇文章介绍了利用 Numba 加速 Python ,文章主要介绍了两个例子,也是 Numba 的两大作用,分别是加速循环,以及对 Numpy 的计算加速。
kbsc13
2019/08/16
10K0
相关推荐
Python可以比C++更快,你不信?
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档