定製化vue-cli Template/webpack

背景

之前的項目要不是前人搭建的,要不就是從 vue-cli 搭建,而後將一些舊項目公用的代碼搬過來,這些操做下來一個小時估計是跑不了的了,因此搭建屬於本身的 template 是一件省時省力的事情。javascript

本文章不會講到 vue-cli 的原理和實現,有興趣的同窗能夠閱讀 從vue-cli源碼學習如何寫模板,這篇文章寫的很好,足夠理解 vue-cli 的原理了。vue

如何修改 template 文件

首先,須要從 template/webpack 下載官方 template/webpack 項目,咱們主要修改的地方是根目錄下的meta.js文件和template目錄;java

meta.js:

主要改兩個地方:prompts 和 filters,咱們用過 inquirer 庫的都知道,prompt 這是一個命令行形式的問答工具,在使用vue init webpack my-project這個命令的時候,須要回答一些問題,就是依賴於 prompt 這個模塊;node

// 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
能夠看到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條件)webpack

{{#lint}}***{{/lint}}表示標籤內的內容只有在lint問題選擇yes纔會存在ios

{{#if_eq runner "jest"}}***{{/if_eq}}表示標籤內的內容只有在runner問題的答案等於jest的狀況纔會存在,我的能夠擴展EOF的條件命令(在lib/generate.js, 默認有if_equnless_eq兩個命令)git

  • 修改文件目錄

這個直接將template的目錄結構改變便可,這裏把src目錄改爲本身習慣的目錄結構github

template/src

我本身的template

github:masongzhi/vue-template-webpackweb

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

vue-template-webpack 特色:

  • 基於 template/webpack 模板
  • 自定義目錄結構
  • 增長 vuex 選項
  • 增長 filters 選項
  • 增長 mock 服務器選項
  • 增長 prettier 選項(不選擇 lint 狀況下,lint 狀況請自行添加)

總結

其實我發覺在不介紹原理的狀況下,感受寫的挺亂的,因此建議你們能夠先閱讀 從vue-cli源碼學習如何寫模板,再看本文章進行實踐;

建立好本身的template模板後,以後再搭建新項目就不用手動的複製黏貼了,確實是很方便的。

ps

項目文章:json-server的實踐與自定義配置化

相關文章
相關標籤/搜索