基于Vue2+TypeScript的项目规划搭建

简介: 最近手头的项目都已经接近尾声,时间比较宽裕,于是想着升级一下网站。上一版的网站还是我刚接触前端时设计的,使用Zepto为主要框架,代码毫无模块化思想,因为后续的功能越加越多,现在每次维护都有自杀的冲动。

最近手头的项目都已经接近尾声,时间比较宽裕,于是想着升级一下网站。上一版的网站还是我刚接触前端时设计的,使用Zepto为主要框架,代码毫无模块化思想,因为后续的功能越加越多,现在每次维护都有自杀的冲动。于是这次想着彻底重构一下网站。


前言

这次重构考虑了很久最终选择了Vue2作为前端的主要框架,还有一些辅助的技术。项目就环境而言健壮性还是很不错的。在搭建环境的过程中遇到了很多问题,浪费了很多时间。这里把环境配置的过程贴出来,如果你们遇到了同样的问题,希望可以帮你们节省一些时间。

这里有一个搭建好的Vue2(2.5+)+TypeScript+ESlint+TSlint+Vuex的项目环境,可以直接使用,里面有一些我自己用到的函数可以自行删除。
GitHub:https://github.com/lwpersonal/module

常规环境搭建

先是常规的vue-cli脚手架,按照官网的示例走,没什么可说的,这里在初始化的选项中没有用官方脚手架中配置的Eslint,而是后续自己配置的。

# 全局安装 vue-cli
$ npm install -g vue-cli

# 创建一个基于 webpack 模板的新项目
$ vue init webpack my-project
$ cd my-project

# 安装依赖,这里用cnpm可能会丢包
$ npm install

# 然后就可以运行看到界面了
$ npm run dev

自定义配置

接下来就是一些自定义的配置,本例中使用的编译器是VSCode。安装下面这些需要用到的插件。

  • ESlint
  • TSlint

Eslint配置

Eslint的配置比较简单,安装相应的插件后安装Eslint的包,在项目的根目录下初始化配置文件。

# 这里注意,如果全局安装的话后续的一些Eslint插件也需要全局安装
$ npm install eslint --save-dev

# 这个插件是让Eslint支持检测vue文件中的js代码,配置在后面会贴出
$ npm install eslint-plugin-html --save-dev
# 这个插件可以让Eslint识别 @ 等ES7的语法
$ npm install babel-eslint --save-dev
$ npm install eslint-plugin-promise eslint-plugin-standard --save

# 初始化配置,会根据选择生成js或json文件,这里可以根据自己的需求选择不同的选项
$ eslint --init

这里写图片描述

自己建立文件的话,配置文件放在根目录就可以。放在子目录的话,子目录的配置文件会覆盖根目录的配置。
如果想要忽略某一个文件,不对其检测可以在js文件内顶部加一句注释代码

/* eslint-disable */

.eslintrc.js:(更多配置移步Eslint规则


// .eslintrc.js
module.exports = {
    "env": {
        "browser": true,
        "commonjs": true,
        "es6": true,
        "jquery": true
    },
    plugins: [
        // 此插件用来识别.html 和 .vue文件中的js代码
        'html',
        // standard风格的依赖包
        "standard",
        "promise"
    ],
    "extends": "eslint:recommended",
    "parserOptions": {
        "sourceType": "module"
    },
    "parser": "babel-eslint", // 让eslint支持es7语法@等
    "rules": {
        "strict": 0, // 让eslint支持es7语法@等
        "no-alert": 2, // 禁用 alert
        "no-console": 0, // 禁用 console
        "no-irregular-whitespace": 2, //禁止tab、空格之外的非法空白
        "array-bracket-spacing": [2, "never"],//禁止或强制在括号内使用空格, 禁止使用不一致的空格,应该遵守格式 [1, 2, 3],也就是,逗号后面一个空格
        "func-call-spacing": 2, // 函数执行需要紧挨着(括号
        "newline-after-var": 1, // 变量定义后增加空行 warn
        "no-mixed-spaces-and-tabs": 2,// 禁止混用tab与空格 禁止空格和 tab 的混合缩进
        "no-trailing-spaces": 2, // 行尾不留空格
        "comma-spacing": 2, // 逗号后非行尾需要加空格
        "spaced-comment": [2, "always"], // 注释后面//后需要增加空格
        "no-unreachable": "error", // 禁止在return、throw、continue 和 break 语句之后出现不可达代码
        "no-dupe-keys": "error", // 禁止对象字面量中出现重复的 key
        "indent": [
            "error",
            2
        ],
        "linebreak-style": [
            "error",
            "windows"
        ],
        "quotes": [
            "error",
            "single"
        ],
        "semi": [
            "error",
            "never"
        ],
        "no-trailing-spaces": 0, // 无拖尾空格
        "linebreak-style": 0 // 忽略行尾的换行符
    }
};

然后在VScode中看一下Eslint的服务器启动是否成功,如果失败的话根据错误提示npm安装相应的模块,如果老是报错的话试着全局和本地都安装一下

这里是成功后的界面

这里写图片描述

然后在工作区打开js文件就可以用Eslint检测代码了

这里写图片描述

Tslint配置

Tslint的配置类似,生成配置文件放在根目录就可以。

$ npm install tslint --save-dev

更多配置移步Tslint配置

// tslint.json

{
    "defaultSeverity": "error",
    "extends": [
        "tslint:recommended"
    ],
    "jsRules": {},
    "rules": {
        "no-var-keyword": true,
        "comment-format": [
            true,
            "check-space"
        ],
        "quotemark": false,
        "triple-equals": true, // 必须用 === 代替 ==
        "semicolon": false, // 行末分号
        "ordered-imports": false, // 引入模块文件必须按照字母顺序排列
        "no-unused-expression": false, // 未使用的表达式,开启后不能实例化vue
        "trailing-comma": false, // object等,语句后必须加逗号
        "object-literal-sort-keys": false, // 组件按字母顺序排列
        "space-before-function-paren": true, // 函数前禁止空格
        "switch-final-break": true, // 检测switch语句后是否有break
        "variable-name": true, // 错误变量名检查
        "arrow-parens": false // 箭头函数参数必须加括号
    },
    "rulesDirectory": []
}

成功后会启动相应的检测服务器

这里写图片描述

然后打开.ts文件就可以使用Tslint了

这里写图片描述

Typescript

Typescript的使用比较繁琐,使用到几个vue的插件

# 安装一些用到的插件
$ npm install typescript ts-loader --save-dev
$ npm install vue-class-component vue-property-decorator --save-dev

然后再你放组件的目录下新建vue.d.ts文件(vue-cli创建的项目默认src目录下)

// 识别vue,html文件中的代码

declare module "*.vue" {
  import Vue from "vue"
  export default Vue
}

更改webpack配置文件

// ...
resolve: {
    extensions: ['.js', '.vue', '.json', '.ts', '.tsx'],
    alias: {
      'vue$': 'vue/dist/vue.esm.js',
      '@': resolve('src'),
    }
  },
  module: {
    rules: [
    // ...
      {
        test: /\.tsx?$/,
        loader: 'ts-loader',
        exclude: /node_modules/,
        options: {
          appendTsSuffixTo: [/\.vue$/],
        }
      }
     // ...
    ]
  },

接下来可以这样写vue组件了

<template>
<my-button ref="button"/>
</template>

<script lang="ts">
import Vue from 'vue'
import Component from 'vue-class-component'
import { Prop, Watch } from 'vue-property-decorator'

import Button from './button.vue' // 这里需要写.vue后缀

@Component({
  //这里放vue实例的配置
  // props的第一种写法,需要在下声明一下才可以使用
  props: {width:Number,ratio:Number}
})

export default class Swiper extends Vue {
  // props声明
  width:Number
  ratio:Number
  // vue实例中的data属性这样写
  scrollWidth :number = window.screen.availWidth
  // ref 子组件的引用
  $refs: {
    button: Button
  }
  // 生命周期
  mounted () {
  }
  // props的第二种写法
  @Prop()
  width :number
  @Prop()
  ratio :number
  @Prop()
  swiperData :Array<Object>
  // 计算属性
  get swiperStyle() :any {
  }
  // watch
  @Watch('$route')
  onRouteChanged(route: any, oldRoute: any) :void {
  }
  // 函数方法可以直接写
  getData() :void {}
}
</script>

<style lang="stylus" scoped>

</style>

到这里环境的配置已经到尾声了,使用了这些工具后虽然刚开是会很痛苦,但是后期维护绝对会节省很多时间。

文章原址:http://blog.csdn.net/qq_25243451/article/details/78231404

目录
相关文章
|
16天前
|
存储 JavaScript
解锁Vuex高级玩法:模块化与插件共舞,让你的Vue项目状态管理如虎添翼!
【8月更文挑战第27天】Vuex是一款专为Vue.js应用程序设计的状态管理模式及库,它通过集中管理组件状态来确保状态变更的可预测性。在大型应用中,采用模块化管理可以让代码结构更加清晰,同时利用插件增强功能。模块化管理允许将store拆分为包含各自state、mutations、actions和getters的独立模块。插件则能监听状态变化,实现诸如日志记录或数据持久化等功能。本文通过具体示例介绍了如何在Vuex中实现模块化管理和插件的高级应用。
30 1
|
26天前
|
JavaScript
如何创建一个Vue项目(手把手教你)
这篇文章是一篇手把手教读者如何创建Vue项目的教程,包括使用管理员身份打开命令行窗口、找到存放项目的位置、通过vue-cli初始化项目、填写项目信息、进入项目目录、启动项目等步骤,并提供了一些常见第三方库的引入方法。
如何创建一个Vue项目(手把手教你)
|
2天前
|
前端开发
vue3+ts项目中使用mockjs
vue3+ts项目中使用mockjs
187 57
|
5天前
|
数据采集 JavaScript 搜索推荐
我们一起聊聊如何对Vue项目进行搜索引擎优化
【9月更文挑战第4天】Vue 项目的搜索引擎优化(SEO)较为复杂,因其内容默认由 JavaScript 渲染,部分搜索引擎难以索引。为提升 SEO 效果,可采用服务器端渲染(SSR)或预渲染,使用 Nuxt.js 或 Vue Server Renderer 实现 SSR,或利用 Prerender SPA Plugin 预渲染静态 HTML。此外,动态管理 Meta 标签、优化静态内容与 Sitemap、懒加载、图片优化、提升页面速度、设置正确的路由模式、使用结构化数据及构建良好外链均有益于 SEO。
40 11
|
23天前
|
JavaScript
Vue项目如何生成树形目录结构
这篇文章介绍了如何在Vue项目中生成树形目录结构,通过安装并使用`mddir`命令行工具来创建一个`directoryList.md`文件,从而快速获取项目的树形目录列表。
Vue项目如何生成树形目录结构
|
15天前
|
JavaScript 前端开发 测试技术
TypeScript逆袭!大型项目为何对它情有独钟?揭秘背后的真相!
【8月更文挑战第27天】随着前端领域的快速发展,JavaScript已成为Web开发的核心语言。然而,在处理大型项目时,其弱类型特性导致的维护困难和易错性等问题日益突出。为解决这些问题,TypeScript应运而生,逐渐成为大型项目的首选方案。
26 3
|
13天前
|
JavaScript
Vue3相关组件项目依赖依赖版本信息
这篇文章展示了一个Vue 3项目中使用的组件和库的依赖版本信息,包括`ant-design-vue`、`swiper`、`vue`、`vue-router`等,以及开发依赖如`vite`、`vue-tsc`、`eslint`等。
Vue3相关组件项目依赖依赖版本信息
|
13天前
|
JavaScript 前端开发 API
解锁前端开发新境界:Vue.js携手Webpack,打造高效构建流程,你的项目值得拥有!
【8月更文挑战第30天】随着前端技术的发展,模块化与组件化趋势愈发显著。Vue.js 以其简洁的 API 和灵活的组件系统,深受开发者喜爱;Webpack 则凭借强大的模块打包能力成为前端工程化的基石。两者结合,不仅简化了组件编写与引用,还通过模块热替换、代码分割等功能大幅提升开发效率。本文将通过具体示例,展示如何利用 Vue.js 和 Webpack 构建高效、有序的前端开发环境。从安装配置到实际应用,逐步解析这一组合的优势所在。
32 0
|
13天前
|
JavaScript 前端开发 安全
【技术革新】Vue.js + TypeScript:如何让前端开发既高效又安心?
【8月更文挑战第30天】在使用Vue.js构建前端应用时,结合TypeScript能显著提升代码质量和开发效率。TypeScript作为JavaScript的超集,通过添加静态类型检查帮助早期发现错误,减少运行时问题。本文通过具体案例展示如何在Vue.js项目中集成TypeScript,并利用其类型系统提升代码质量。首先,使用Vue CLI创建支持TypeScript的新项目,然后构建一个简单的待办事项应用,通过定义接口描述数据结构并在组件中使用类型注解,确保代码符合预期并提供更好的编辑器支持。
31 0
|
13天前
|
JavaScript 前端开发 安全
立等可取的 Vue + Typescript 函数式组件实战
立等可取的 Vue + Typescript 函数式组件实战