国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

如何使用 vue-cli 3 的 preset 打造基于 git repo 的前端項(xiàng)目模板

MAX_zuo / 3268人閱讀

摘要:從使用和也是支持的。此處直接首頁(yè)其中當(dāng)時(shí),內(nèi)的配置信息會(huì)直接覆蓋初始化后項(xiàng)目中的。文件接下來(lái)就是,這個(gè)文件負(fù)責(zé)的就是注入或是修改項(xiàng)目中文件。比如我的其中和就是用戶在處理中設(shè)定的問(wèn)題的回答值。

vue-cli 之 Preset

vue-cli 插件開(kāi)發(fā)指南

TLDR

背景介紹

vue-cli 3 完全推翻了 vue-cli 2 的整體架構(gòu)設(shè)計(jì),所以當(dāng)你需要給組里定制一份基于 vue-cli 的前端項(xiàng)目初始化模板時(shí),就需要去思考:我該怎么做?

我們要做的事情很簡(jiǎn)單,就是當(dāng)別人使用 vue create xxx 命令初始化一個(gè)前端項(xiàng)目時(shí),可以從 git repo 去拉取項(xiàng)目初始化信息,好處有兩點(diǎn):

團(tuán)隊(duì)內(nèi)部所有的新項(xiàng)目都是統(tǒng)一的目錄結(jié)構(gòu)代碼組織方式,便于維護(hù)

后期可以開(kāi)發(fā)公共插件服務(wù)于不同的項(xiàng)目,提高效率

因?yàn)?vue-cli 3 才出來(lái)不久,所以探索的過(guò)程中踩了很多坑,這里就來(lái)總結(jié)下。

整體設(shè)計(jì)

vue-cli 官網(wǎng)介紹到:

你可以通過(guò)發(fā)布 git repo 將一個(gè) preset 分享給其他開(kāi)發(fā)者。這個(gè) repo 應(yīng)該包含以下文件:

preset.json: 包含 preset 數(shù)據(jù)的主要文件(必需)。

generator.js: 一個(gè)可以注入或是修改項(xiàng)目中文件的 Generator。

prompts.js: 一個(gè)可以通過(guò)命令行對(duì)話為 generator 收集選項(xiàng)的 prompts 文件。

# 從 GitHub repo 使用 preset
vue create --preset username/repo my-project
GitLab 和 BitBucket 也是支持的。如果要從私有 repo 獲取,請(qǐng)確保使用 --clone 選項(xiàng):
vue create --preset gitlab:username/repo --clone my-project
vue create --preset bitbucket:username/repo --clone my-project

是不是看上去很簡(jiǎn)單,起碼我在實(shí)踐過(guò)程中還是遇到了一些問(wèn)題,接下來(lái)就重點(diǎn)講下。

git repo 參數(shù)

上面 --preset 后跟的參數(shù) username/repo 實(shí)際是下圖中的紅框內(nèi)部分(千萬(wàn)別以為是 git clone 后的地址):

preset.json 文件

先說(shuō)一點(diǎn):當(dāng)你直接用 vue create xxx 初始化項(xiàng)目時(shí),如果你將初始化信息保存成一個(gè)本地模板后,會(huì)寫(xiě)入到你系統(tǒng)的 ~/.vuerc 文件中。該文件中的內(nèi)容其實(shí)就是我們接下來(lái)需要配置的 present.json

此處直接 show code :

{
  "useConfigFiles": true,

  "cssPreprocessor": "less",

  "plugins": {

    "@vue/cli-plugin-babel": {
      "version": "^3.0.0"
    },

    "@vue/cli-plugin-eslint": {
      "version": "^3.0.0",

      "config": "recommended",

      "lintOn": ["save", "commit"]
    }
  },

  "configs": {

    "vue": {
      "baseUrl": "/",

      "outputDir": "dist",

      "assetsDir": "static",

      "filenameHashing": true,

      "lintOnSave": true,

      "runtimeCompiler": false,

      "transpileDependencies": [],

      "productionSourceMap": false,

      "pages": {
        "index": {
          "entry": "src/main.js",
          "template": "public/index.html",
          "filename": "index.html",
          "title": "首頁(yè)",
          "chunks": ["chunk-vendors", "chunk-common", "index"]
        }
      },

      "devServer": {
        "open": true,

        "host": "127.0.0.1",

        "https": false,

        "hotOnly": false,

        "proxy": null
      },

      "pwa": {},

      "pluginOptions": {}
    },

    "postcss": {},

    "eslintConfig": {
    }
  },

  "router": true,

  "vuex": false,

  "routerHistoryMode": false
}

其中當(dāng) "useConfigFiles": true 時(shí), configs 內(nèi)的配置信息會(huì)直接覆蓋初始化后項(xiàng)目中的 vue.config.js

prompts.js 文件

prompts.js 其實(shí)就是你在初始化項(xiàng)目時(shí),系統(tǒng)會(huì)詢問(wèn)你的配置選項(xiàng)問(wèn)題,比如你的項(xiàng)目需不需要安裝 vuex? 需不需要安裝 vue-router?

你的回答會(huì)直接影響后面初始化生成的項(xiàng)目文件。

這里最需要注意一點(diǎn)!!!

當(dāng)你查看官方文檔時(shí),第一眼看到就是下圖:

只要你這樣寫(xiě),就一定會(huì) 報(bào)錯(cuò) !!!

原因很簡(jiǎn)單:上圖中 prompts.js 的寫(xiě)法是開(kāi)發(fā)基于 vue-cli-service 插件的代碼。而當(dāng)你是要開(kāi)發(fā)項(xiàng)目模板時(shí),正確寫(xiě)法如下:

module.exports = [
  {
    name: "vuex",
    type: "confirm",
    message: `是否需要使用 vuex`,
    default: false
  },
  {
    name: "elementUI",
    type: "confirm",
    message: `element-ui`,
    default: false
  }
];

這一點(diǎn)其實(shí)官網(wǎng)也有提到,只是很不容易注意到。

此處再給大家安利下 vue-cli-plugin-vuetify 這個(gè)開(kāi)源插件中 prompts.js 的寫(xiě)法。程序猿嘛,最愛(ài)的就是栗子。

generator.js 文件

接下來(lái)就是 generator.js,這個(gè)文件負(fù)責(zé)的就是 注入或是修改項(xiàng)目中文件

同樣,我還是直接 show code :

module.exports = (api, options, rootOptions) => {
  // 安裝一些基礎(chǔ)公共庫(kù)
  api.extendPackage({
    dependencies: {
      "axios": "^0.18.0",
      "lodash": "^4.17.10",
      "keymirror": "^0.1.1"
    },
    devDependencies: {
      "mockjs": "^1.0.1-beta3"
    }
  });

  // 安裝 vuex
  if (options.vuex) {
    api.extendPackage({
      dependencies: {
        vuex: "^3.0.1"
      }
    });

    api.render("./template/vuex");
  }

  // 安裝 element-ui 庫(kù)
  if (options.elementUI) {
    api.extendPackage({
      devDependencies: {
        "element-ui": "^2.4.6"
      }
    });
  }

  // 公共基礎(chǔ)目錄和文件
  api.render("./template/default");

  // 配置文件
  api.render({
    "./.eslintrc.js"     : "./template/_eslintrc.js",
    "./.gitignore"       : "./template/_gitignore",
    "./.postcssrc.js"    : "./template/_postcssrc.js"
  });
}

核心 api:

api.extendPackage : 負(fù)責(zé)給初始化項(xiàng)目中的 package.json 添加額外依賴并安裝;

api.render : 負(fù)責(zé)將模板項(xiàng)目中提前定義好的目錄和文件拷貝到初始化的項(xiàng)目中;

api.postProcessFiles : 負(fù)責(zé)具體處理模板項(xiàng)目中的文件,關(guān)于它可以參考 How to build your own vue-cli 3 plugin 和 GeneratorAPI.js 源碼

對(duì)于 api.render 需要注意幾點(diǎn):

拷貝目錄的話,直接傳地址字符串,render 函數(shù)會(huì)將你所傳目錄內(nèi)的所有文件覆蓋初始化項(xiàng)目中 src 目錄下的文件(我的測(cè)試結(jié)果是限于兩層目錄);

拷貝文件的話,直接傳入一個(gè) object,其中 key 對(duì)應(yīng)初始化項(xiàng)目中的目標(biāo)位置,value 對(duì)應(yīng)模板項(xiàng)目中的文件位置;

當(dāng)你需要?jiǎng)?chuàng)建一個(gè)以 . 開(kāi)頭的文件時(shí),模板項(xiàng)目中需要用 _ 替代 .,這點(diǎn)官網(wǎng)有說(shuō)明;

最后再說(shuō)個(gè)很重要點(diǎn),vue-cli 3 在拷貝文件時(shí)使用的是 EJS 模板去實(shí)現(xiàn)的,所以開(kāi)發(fā)者是可以在任意文件中使用 EJS 語(yǔ)法去做更細(xì)粒度的控制。比如我的 main.js:

import Vue from "vue"
import App from "./App.vue"
<%_ if (options.vuex) { _%>
import store from "./store"
<%_ } _%>
<%_ if (options.elementUI) { _%>
import ElementUI from "element-ui";
Vue.use(ElementUI);
<%_ } _%>

// simulation data
import "./mock/index";

Vue.config.productionTip = false

new Vue({
  router,
  <%_ if (options.vuex) { _%>
  store,
  <%_ } _%>
  render: h => h(App)
}).$mount("#app")

其中 options.vuexoptions.elementUI 就是用戶在處理 prompts.js 中設(shè)定的問(wèn)題的回答值。正是基于這點(diǎn),我沒(méi)有再去使用 api.postProcessFiles 這個(gè) api 。

今天就寫(xiě)到這里,后續(xù)有補(bǔ)充再寫(xiě)~

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/97760.html

相關(guān)文章

  • 如何使用 vue-cli 3 preset 打造基于 git repo 前端項(xiàng)目模板

    摘要:從使用和也是支持的。此處直接首頁(yè)其中當(dāng)時(shí),內(nèi)的配置信息會(huì)直接覆蓋初始化后項(xiàng)目中的。文件接下來(lái)就是,這個(gè)文件負(fù)責(zé)的就是注入或是修改項(xiàng)目中文件。比如我的其中和就是用戶在處理中設(shè)定的問(wèn)題的回答值。 vue-cli 之 Preset vue-cli 插件開(kāi)發(fā)指南 TLDR 背景介紹 vue-cli 3 完全推翻了 vue-cli 2 的整體架構(gòu)設(shè)計(jì),所以當(dāng)你需要給組里定制一份基于 vue-cl...

    Jokcy 評(píng)論0 收藏0
  • 如何使用 vue-cli 3 preset 打造基于 git repo 前端項(xiàng)目模板

    摘要:從使用和也是支持的。此處直接首頁(yè)其中當(dāng)時(shí),內(nèi)的配置信息會(huì)直接覆蓋初始化后項(xiàng)目中的。文件接下來(lái)就是,這個(gè)文件負(fù)責(zé)的就是注入或是修改項(xiàng)目中文件。比如我的其中和就是用戶在處理中設(shè)定的問(wèn)題的回答值。 vue-cli 之 Preset vue-cli 插件開(kāi)發(fā)指南 TLDR 背景介紹 vue-cli 3 完全推翻了 vue-cli 2 的整體架構(gòu)設(shè)計(jì),所以當(dāng)你需要給組里定制一份基于 vue-cl...

    desdik 評(píng)論0 收藏0
  • 深入認(rèn)識(shí)vue-cli:能做不僅僅是初始化vue工程

    摘要:借助,我們通過(guò)非常簡(jiǎn)單的問(wèn)答形式,方便地初始化一個(gè)工程,完全不需要擔(dān)心繁復(fù)的配置等等。簡(jiǎn)單來(lái)說(shuō),就是不僅僅能初始化工程,理論上能夠初始化一切工程,包括,等等等等,只要你有一份能夠運(yùn)行的模板,就能夠通過(guò)進(jìn)行工程的初始化。 相信對(duì)于大部分使用過(guò)VueJS的同學(xué)來(lái)說(shuō),vue-cli是他們非常熟悉的一個(gè)工具。借助vue-cli,我們通過(guò)非常簡(jiǎn)單的問(wèn)答形式,方便地初始化一個(gè)vue工程,完全不需要...

    AlienZHOU 評(píng)論0 收藏0
  • 搭建一個(gè)通用腳手架

    摘要:在年年底的時(shí)候,同事聊起腳手架。由于公司業(yè)務(wù)的多樣性前端的靈活性讓我們不得不思考更通用的腳手架。針對(duì)開(kāi)發(fā)使用的腳手架針對(duì)項(xiàng)目創(chuàng)建項(xiàng)目通用腳手架是一款強(qiáng)壯的且有一系列工具的通用型腳手架,但發(fā)布指定名稱,和用其開(kāi)發(fā)工具。 在16年年底的時(shí)候,同事聊起腳手架。由于公司業(yè)務(wù)的多樣性,前端的靈活性,讓我們不得不思考更通用的腳手架。而不是伴隨著前端技術(shù)的發(fā)展,不斷的把時(shí)間花在配置上。于是chef-...

    187J3X1 評(píng)論0 收藏0
  • 初探vue-cli 3.0

    摘要:當(dāng)你將一系列的特性選擇完畢后最后回提示你是否將已選項(xiàng)保存成一個(gè)快速將來(lái)可復(fù)用的當(dāng)你選擇保存時(shí),被保存的將會(huì)存在用戶的目錄下一個(gè)名為的文件里。 準(zhǔn)備工作 npm install -g @vue/cli or yarn global add @vue/cli 安裝需要Node.js8.9以上版本,安裝完成后可以通過(guò)vue --version來(lái)驗(yàn)證是否安裝成功 項(xiàng)目創(chuàng)建 vue create...

    superPershing 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<