写在前面--最近接手了一个活动页,决定采用Vue来进行开发,再也不与主站的React相关联,因此我也就有机会能够从头开始,一步一步的搭建整个项目而且本身决定技术栈。反正,就是很爽~css
关于Vue我感受不须要再作介绍了,在掘金随便一搜都有一堆,不过若是你们实在没据说过,我仍是十分建议直接进入Vue的官方文档进行阅读。html
最近,接了一个活--一个彻底独立的活动页开发,因为它跟公司原有的项目(基于React)几乎彻底没有依赖关系,因此我决定采用Vue来开发此次的需求。前端项目的技术框架初步定为--Vue/Vue-router/axios/sass/webpack。看到vue和webpack相信你们一下就能想到vue-cli吧,对的,咱们此次项目选用了vue-cli-webpack做为脚手架。前端
咱们假设vue的起手难度是10个难度级别,可是当咱们使用了vue-cli以后,咱们会发现这个难度就变成了1个难度级别,(好像咱们的施法先后摇都被取消了同样)安装好vue-cli以后咱们就能够直接开始咱们的生产了,不管是vue亦或是webpack的配置都不须要咱们理会,而且还可以使用vue-template来加快开发速度。那么让咱们开始搭建咱们的脚手架吧--vue
$ npm install -g vue-cli
$ vue init webpack kurisu //'webpack'指定了咱们但愿项目是使用webpack进行打包的
$ cd kurisu
$ npm install
$ npm run dev
复制代码
整个流程就是这么简单,前提是你须要安装Node(6.x版本以上)以及NPM(3.0版本以上)。如今咱们有了真正意义上的脚手架了,接下来就要着手往上堆东西了。node
在项目伊始,相信你们都遇到过这个问题,咱们所开发的项目到底须要怎么开发、它须要什么工具、或是有什么可以为它所用。webpack
这回我须要开发的是一个移动端的活动页,移动端移动端,天然就少不了对屏幕的适配啦。以切图半年的经验,我选择rem做为页面开发的单位,其实就是借鉴了淘宝flexible的那一套。既然用到了这个,那么css的预编译器就少不了了,这里选择了以前一直都在用的scss,可是最近据说stylus也不错,小纠结了一会,最终仍是选择如今看来开发效率最高的scss。ios
好了,回看上面那段话,好像已经给本身挖了很多坑了,让咱们一个个来填。web
移动端Htmlvue-cli
关于移动端的html要说的很少,最重要的这句在就行了--npm
<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no"/>
复制代码
Rem布局
Rem是啥?简单来讲是css中的一个单位,以html的font-size做为单位的标准也就是说
html {
font-size: 100px;
}
复制代码
此时1rem也就等于100px,嗯嗯这些我都懂,可是他跟移动端开发有什么必然关系吗?能够说有也能够说无,用了rem做为开发单位能够提高开发效率,下降视觉稿还原难度,也能加强页面在不一样屏幕上的适应能力。 下面是在项目中的Global.scss的配置--
html {
font-size: calc(100vw/7.5);
/*有了这一行就表明html的font-size是动态计算的,它随着咱们屏幕的大小(100vw)变化而变化*/
}
复制代码
那么其中的7.5是什么呢?实际上是这样的--100vw/750px,为何是750px,由于这是标准iPhone7尺寸的两倍也就是俗称的二倍图,这样处理以后1rem就等于iPhone7手机页面中的100px,那为何要除7.5呢?我的认为是为了方便书写。
@function px2rem($n) {
@return $n/100*1rem
}
复制代码
定义了这一个方法以后,咱们想作设计稿(二倍图)中一个100x100px的正方形时能够这么写:
.somediv {
width: px2rem(100);
height: px2rem(100);
/*px2rem(100) ==> 375px屏幕中的50px*/
}
复制代码
不知道你们发现没有,这就表明着咱们能够彻底照搬设计稿中的全部参数,而且基本能够忽略不一样尺寸屏幕的适配状况,由于rem的基础单位是会随着屏幕尺寸变化而变化的,可是有一点可能有问题,那就是Retina屏的精度问题关于这里的适配你们能够去寻找相关的博文查看一下,若是要细讲的话可能就偏题了。
SCSS配置
说了这么屡次scss,好像还没讲应该怎么将scss接入webpack中。
首先把相关的依赖装好--
(c)npm install node-sass --save-dev //安装node-sass
(c)npm install sass-loader --save-dev //安装sass-loader
//原本应该还要装一个style-loader的可是通常咱们用vue-cli以后都是有vue-style-loader的因此就不须要再折腾了。
复制代码
紧接着就配置一下咱们的webpack.base.conf.js
module: {
rules: [
...(config.dev.useEslint ? [createLintingRule()] : []),
{
test: /\.vue$/,
loader: 'vue-loader',
options: vueLoaderConfig
},
{
test: /\.js$/,
loader: 'babel-loader',
include: [resolve('src'), resolve('test'), resolve('node_modules/webpack-dev-server/client')]
},
{
test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
loader: 'url-loader',
options: {
limit: 10000,
name: utils.assetsPath('img/[name].[hash:7].[ext]')
}
},
{
test: /\.(mp4|webm|ogg|mp3|wav|flac|aac)(\?.*)?$/,
loader: 'url-loader',
options: {
limit: 10000,
name: utils.assetsPath('media/[name].[hash:7].[ext]')
}
},
{
test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/,
loader: 'url-loader',
options: {
limit: 10000,
name: utils.assetsPath('fonts/[name].[hash:7].[ext]')
}
},
//新增下面这一段便可,让webpack使用相关的loader去解析scss后缀的文件
{
test: /\.scss$/,
loaders: ["style", "css", "sass"]
}
]
}
复制代码
这样就完成了在vue项目中引用scss的需求啦,还有一点须要注意的是该怎么在vue-template中引用,这里其实有几种不一样的引用方法,就先介绍一下个人引用方式--
<style lang="scss" scoped>
@import "./Index.scss";
</style>
复制代码
我的倾向于一一对应的引用模式,每个page我都会新建对应的文件夹,并将与之相关的东西都放到一块儿。
与全局相关的样式则放在Global.scss中由App.vue引入,Utils.scss则是用来放一些公用但不公共的样式或方法。另外还有一种方式--将全部的scss文件都import进一个总的scss文件,而后在App.vue中引入这个总的scss文件便可。
至此,已经基本完成了vue项目的脚手架,咱们能够很惬意的往项目里面填肉了。下一篇,将会结合具体开发的页面,记录一下途中遇到的问题和填过的坑。