当前位置: 首页 > news >正文

定制化vue-cli Template/webpack

背景

以前的项目要不是前人搭建的,要不就是从 vue-cli 搭建,然后将一些旧项目公用的代码搬过来,这些操作下来一个小时估计是跑不了的了,所以搭建属于自己的 template 是一件省时省力的事情。

本文章不会讲到 vue-cli 的原理和实现,有兴趣的同学可以阅读 从vue-cli源码学习如何写模板,这篇文章写的很好,足够理解 vue-cli 的原理了。

如何修改 template 文件

首先,需要从 template/webpack 下载官方 template/webpack 项目,我们主要修改的地方是根目录下的meta.js文件和template目录;

meta.js:

主要改两个地方:prompts 和 filters,我们用过 inquirer 库的都知道,prompt 这是一个命令行形式的问答工具,在使用vue init webpack my-project这个命令的时候,需要回答一些问题,就是依赖于 prompt 这个模块;

// prompts(节选)
prompts: {
    name: {
      when: 'isNotTest', // 代表不是test的时候询问(isNotTest可以看scenarios/index.js文件)
      type: 'string', // 问题的类型,这里 string 代表输入项目名字
      required: true, // 必须填写 name
      message: 'Project name', // 问题的描述
    },
    lint: {
      when: 'isNotTest',
      type: 'confirm',
      message: 'Use ESLint to lint your code?',
    },
    lintConfig: {
      when: 'isNotTest && lint', // 代表不是test并且上面lint问题选择yes才询问
      type: 'list', // 答案从choices中选择
      message: 'Pick an ESLint preset',
      choices: [
        {
          name: 'Standard (https://github.com/standard/standard)',
          value: 'standard',
          short: 'Standard',
        },
        {
          name: 'Airbnb (https://github.com/airbnb/javascript)',
          value: 'airbnb',
          short: 'Airbnb',
        },
        {
          name: 'none (configure it yourself)',
          value: 'none',
          short: 'none',
        }
      ],
    }
}
复制代码
// filters(节选)
filters: {
    '.eslintrc.js': 'lint', // .eslintrc.js文件只有lint问题选择yes才会创建
    'build/webpack.test.conf.js': "unit && runner === 'karma'", // webpack.test.conf.js文件只有unit问题选择yes并且runner问题选择karma选项才会创建
    'src/router/**/*': 'router' // src/router目录只有在router问题选择yes才会创建
  }
复制代码

template:

  • 编写EOF条件

可以看到template文件夹看起来就是一个 vue init命令后的目录了,但仔细看文件的话可以看到差异:

// package.json/scripts
"scripts": {
    "dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js",
    "start": "npm run dev",
    {{#if_eq runner "jest"}}
    "unit": "jest --config test/unit/jest.conf.js --coverage",
    {{/if_eq}}
    {{#if_eq runner "karma"}}
    "unit": "cross-env BABEL_ENV=test karma start test/unit/karma.conf.js --single-run",
    {{/if_eq}}
    {{#e2e}}
    "e2e": "node test/e2e/runner.js",
    {{/e2e}}
    {{#if_or unit e2e}}
    "test": "{{#unit}}npm run unit{{/unit}}{{#unit}}{{#e2e}} && {{/e2e}}{{/unit}}{{#e2e}}npm run e2e{{/e2e}}",
    {{/if_or}}
    {{#lint}}
    "lint": "eslint --ext .js,.vue src{{#unit}} test/unit{{/unit}}{{#e2e}} test/e2e/specs{{/e2e}}",
    {{/lint}}
    "build": "node build/build.js"
  }
复制代码

可以看多在package.json文件里穿插着一些EOF风格的标签,这些标签可分为两种(可以自己扩展EOF条件)

{{#lint}}***{{/lint}}表示标签内的内容只有在lint问题选择yes才会存在

{{#if_eq runner "jest"}}***{{/if_eq}}表示标签内的内容只有在runner问题的答案等于jest的情况才会存在,个人可以扩展EOF的条件命令(在lib/generate.js, 默认有if_equnless_eq两个命令)

  • 修改文件目录

这个直接将template的目录结构改变即可,这里把src目录改成自己习惯的目录结构

我自己的template

github:masongzhi/vue-template-webpack

用法:vue init masongzhi/vue-template-webpack my-project

vue-template-webpack 特点:

  • 基于 template/webpack 模板
  • 自定义目录结构
  • 增加 vuex 选项
  • 增加 filters 选项
  • 增加 mock 服务器选项
  • 增加 prettier 选项(不选择 lint 情况下,lint 情况请自行添加)

总结

其实我发觉在不介绍原理的情况下,感觉写的挺乱的,所以建议大家可以先阅读 从vue-cli源码学习如何写模板,再看本文章进行实践;

创建好自己的template模板后,之后再搭建新项目就不用手动的复制黏贴了,确实是很方便的。

ps

项目文章:json-server的实践与自定义配置化

相关文章:

  • linux常用命令之用户及用户组操作
  • Ubuntu x86-64汇编(5) 控制指令
  • DOM4J使用简介
  • Python学习之路13-记分
  • 怎样解决chm类型的文件在Windows操作系统中无法打开
  • k8s 环境搭建,etcd启动失败
  • 给Notepad++ 加右键菜单带图标
  • SharePoint On Premise/ SharePoint Online增强格式的文本栏
  • Android SQLite
  • nginx keepalive
  • 一个关于ceph的可用空间测试
  • C# Socket系列1
  • 简历查看下载网站列表
  • Android的ListView中用上下文菜单
  • Django之Form组件
  • php的引用
  • 345-反转字符串中的元音字母
  • ES6核心特性
  • flask接收请求并推入栈
  • JavaScript HTML DOM
  • Java多态
  • Node.js 新计划:使用 V8 snapshot 将启动速度提升 8 倍
  • VuePress 静态网站生成
  • 关于extract.autodesk.io的一些说明
  • 关于Java中分层中遇到的一些问题
  • 机器学习 vs. 深度学习
  • 聚类分析——Kmeans
  • 思维导图—你不知道的JavaScript中卷
  • 协程
  • ###51单片机学习(1)-----单片机烧录软件的使用,以及如何建立一个工程项目
  • #LLM入门|Prompt#2.3_对查询任务进行分类|意图分析_Classification
  • #我与Java虚拟机的故事#连载17:我的Java技术水平有了一个本质的提升
  • (1)Map集合 (2)异常机制 (3)File类 (4)I/O流
  • (带教程)商业版SEO关键词按天计费系统:关键词排名优化、代理服务、手机自适应及搭建教程
  • (二)斐波那契Fabonacci函数
  • (机器学习-深度学习快速入门)第三章机器学习-第二节:机器学习模型之线性回归
  • (学习日记)2024.01.09
  • (转)h264中avc和flv数据的解析
  • (转)PlayerPrefs在Windows下存到哪里去了?
  • (转)树状数组
  • .NET/C# 编译期间能确定的相同字符串,在运行期间是相同的实例
  • .netcore 如何获取系统中所有session_如何把百度推广中获取的线索(基木鱼,电话,百度商桥等)同步到企业微信或者企业CRM等企业营销系统中...
  • .net打印*三角形
  • .NET中使用Redis (二)
  • // an array of int
  • /etc/motd and /etc/issue
  • [ MSF使用实例 ] 利用永恒之蓝(MS17-010)漏洞导致windows靶机蓝屏并获取靶机权限
  • [BZOJ 3531][Sdoi2014]旅行(树链剖分+线段树)
  • [BZOJ5250][九省联考2018]秘密袭击(DP)
  • [C#]科学计数法(scientific notation)显示为正常数字
  • [Codeforces] probabilities (R1600) Part.1
  • [IE9] GPU硬件加速到底是实用创新还是噱头
  • [IE编程] 打开/关闭IE8的光标浏览模式(Caret Browsing)
  • [Java][方法引用]构造方法的引用事例分析
  • [Jquery] 实现鼠标移到某个对象,在旁边显示层。