成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

手把手教你結(jié)合commitizen 搭建屬于自己的項(xiàng)目git commit 校驗(yàn)工具

kel / 3299人閱讀

摘要:其實(shí)有點(diǎn)耗時(shí)間,所以我們做了一下自動(dòng)化初步自動(dòng)化修改中的初始化將部分腳本寫入到中詢問(wèn)是否全部使用是否默認(rèn)使用開始安裝依賴正在安裝正在安裝清除掉以前配置的只要兩部安裝即可提交代碼的時(shí)候直接執(zhí)行即可更智能摸索中

先丟出最終版的index.js文件內(nèi)容
#!/usr/bin/env node
"use strict";
const path = require("path");
const editJsonFile = require("edit-json-file");
const arg = process.argv
// 初始化my-commit ,將部分腳本寫入到package.json中
if (arg[2] && arg[2] === "init") {
  // If the file doesn"t exist, the content will be an empty object by default.
  let file = editJsonFile(`${process.cwd()}/package.json`);
  // Set a couple of fields
  file.set("husky", {"hooks": {
    "pre-commit": "lint-staged"
  }});
  file.set("lint-staged", {
    "src/*.js": "["eslint --fix"]"
  });
  // 詢問(wèn)是否全部使用git add .
  var List = require("prompt-list");
  var list = new List({
    name: "order",
    message: "是否默認(rèn)使用git add .",
    // choices may be defined as an array or a function that returns an array
    choices: [
      "yes",
      "no"
    ]
  })
  // async
  list.ask(function(answer) {
    file.set("scripts", {
      "my-ci": answer === "yes" ? "git add . && cross-env ./node_modules/.bin/my-commit" : "cross-env ./node_modules/.bin/my-commit"
    });
    // Output the content
    file.save();
    var shell = require("shelljs");
    console.log("開始安裝依賴");
    shell.exec("npm i husky --save-dev", {async: true})
    console.log("正在安裝 husky---- ");
    shell.exec("npm i cross-env --save-dev", {async: true})
    console.log("正在安裝cross-env ---- ");
    shell.exec("npm i lint-staged --save-dev", {async: true})
  })
} else {
  const bootstrap = require("commitizen/dist/cli/git-cz").bootstrap;
  bootstrap({
    cliPath: path.join(__dirname, "../../node_modules/commitizen"),
    // this is new
    config: {
      "path": "cz-conventional-changelog",
      "path": "cz-emoji"
    }
  });
}
步驟 一、創(chuàng)建工具項(xiàng)目
1.使用git/gitlab創(chuàng)建一個(gè)空的倉(cāng)庫(kù)
2.在空倉(cāng)庫(kù)中添加index.js 內(nèi)容如下
// index.js

#!/usr/bin/env node
"use strict";
const bootstrap = require("commitizen/dist/cli/git-cz").bootstrap;
  bootstrap({
    cliPath: path.join(__dirname, "../../node_modules/commitizen"),
    // this is new
    config: {
      "path": "cz-conventional-changelog"
    }
  });
使用工具到相應(yīng)的項(xiàng)目(假設(shè)插件名稱my-commit
1.先發(fā)布你的工具項(xiàng)目到npm,相當(dāng)于創(chuàng)建一個(gè)npm包、具體怎么發(fā)布 這里不做贅述,網(wǎng)上很多教程
2.安裝工具(假設(shè)插件名稱my-commit
npm install my-commit --save-dev
3.配置

需要在package.jsonscript中添加如下

// my-ci 是自己定義的寫成什么都可以

"my-ci": "./node_modules/.bin/my-commit"
4.配置之后 執(zhí)行了git add .之后 執(zhí)行npm run my-ci 將會(huì)出現(xiàn)選填補(bǔ)充信息的選項(xiàng)

如果覺(jué)得git add.之后再執(zhí)行 npm run my-ci 有點(diǎn)麻煩,可以直接改成

// my-ci 是自己定義的寫成什么都可以

"my-ci": "git add. && ./node_modules/.bin/my-commit"
5 因?yàn)橐陨厦畲嬖诓煌到y(tǒng)路徑不兼容問(wèn)題 需要加入 cross-env
npm install cross-env --save-dev 
6 再次修改package.json
// my-ci 是自己定義的寫成什么都可以

"my-ci": "git add. && cross-env ./node_modules/.bin/my-commit"

當(dāng)需要提交代碼的時(shí)候,不用執(zhí)行git add . 直接執(zhí)行npm run my-ci即可

7 提示信息加上可愛(ài)的表情

需要在index.js文件中添加 cz-emoji 如下

// index.js

#!/usr/bin/env node
"use strict";

const bootstrap = require("commitizen/dist/cli/git-cz").bootstrap;
  bootstrap({
    cliPath: path.join(__dirname, "../../node_modules/commitizen"),
    // this is new
    config: {
      "path": "cz-conventional-changelog",
      "path": "cz-emoji"
    }
  });

這個(gè)時(shí)候 重新發(fā)npm包之后再安裝到自己的項(xiàng)目下,執(zhí)行提交的時(shí)候

8 為了增強(qiáng)校驗(yàn)功能,加入eslint對(duì)文件進(jìn)行

這個(gè)有點(diǎn)復(fù)雜,需要通過(guò)lint-staged來(lái)判斷

所以先安裝以下依賴

npm i husky --save-dev
npm i lint-stage --save-dev

配置package.json

// 增加屬性
  "husky": {
    "hooks": {
      "pre-commit": "lint-staged"
    }
  },
  "lint-staged": {
    "src/*.js": [
      "eslint --fix"
    ]
  },
// 其中src的具體路徑是可以自己配置
// 校驗(yàn)規(guī)則是基于當(dāng)前目錄的.eslintrc.js 文件,如果有些規(guī)則不想要,就配置這個(gè)文件

這個(gè)時(shí)候我們提交代碼的時(shí)候再輸入基本的信息之后會(huì)執(zhí)行一個(gè)eslint的代碼規(guī)則

總結(jié)以上配置文件 我們需要

安裝的庫(kù)有

npm i my-commit --save-dev
npm i cross --save-dev
npm i husky --save-dev
npm i lint-stage --save-dev

需要配置package.json屬性有

  "script": {
      ...
      "my-ci": "git add. && cross-env ./node_modules/.bin/my-commit"
    },

  "husky": {
    "hooks": {
      "pre-commit": "lint-staged"
    }
  },
  "lint-staged": {
    "src/*.js": [
      "eslint --fix"
    ]
  },

如果每個(gè)項(xiàng)目都這么玩。其實(shí)有點(diǎn)耗時(shí)間,所以我們做了一下自動(dòng)化

10 初步自動(dòng)化

修改my-commit中的 index.js

#!/usr/bin/env node
"use strict";
const path = require("path");
const editJsonFile = require("edit-json-file");
const arg = process.argv
// 初始化my-commit ,將部分腳本寫入到package.json中
if (arg[2] && arg[2] === "init") {
  // If the file doesn"t exist, the content will be an empty object by default.
  let file = editJsonFile(`${process.cwd()}/package.json`);
  // Set a couple of fields
  file.set("husky", {"hooks": {
    "pre-commit": "lint-staged"
  }});
  file.set("lint-staged", {
    "src/*.js": "["eslint --fix"]"
  });
  // 詢問(wèn)是否全部使用git add .
  var List = require("prompt-list");
  var list = new List({
    name: "order",
    message: "是否默認(rèn)使用git add .",
    // choices may be defined as an array or a function that returns an array
    choices: [
      "yes",
      "no"
    ]
  })
  // async
  list.ask(function(answer) {
    file.set("scripts", {
      "my-ci": answer === "yes" ? "git add . && cross-env ./node_modules/.bin/my-commit" : "cross-env ./node_modules/.bin/my-commit"
    });
    // Output the content
    file.save();
    var shell = require("shelljs");
    console.log("開始安裝依賴");
    shell.exec("npm i husky --save-dev", {async: true})
    console.log("正在安裝 husky---- ");
    shell.exec("npm i cross-env --save-dev", {async: true})
    console.log("正在安裝cross-env ---- ");
    shell.exec("npm i lint-staged --save-dev", {async: true})
  })
} else {
  const bootstrap = require("commitizen/dist/cli/git-cz").bootstrap;
  bootstrap({
    cliPath: path.join(__dirname, "../../node_modules/commitizen"),
    // this is new
    config: {
      "path": "cz-conventional-changelog",
      "path": "cz-emoji"
    }
  });
}
 

清除掉以前配置的package.json

只要兩部安裝即可

npm i my-commit
npx my-commit init

提交代碼的時(shí)候直接執(zhí)行 npm run my-ci 即可

11 更智能(摸索中)

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/98628.html

相關(guān)文章

  • 把手教你github提交記錄

    摘要:但是,畢竟是人,哪天忙了就會(huì)忘記提交,所以想著能不能實(shí)現(xiàn)在自己阿里云服務(wù)器系統(tǒng)上,設(shè)置,定制下命令,實(shí)現(xiàn)每天定點(diǎn)自動(dòng)提交。 前言 進(jìn)入自己github主頁(yè)會(huì)看到自己的提交記錄,如果某天沒(méi)有提交記錄,那天的小方框就顯示灰色。強(qiáng)迫癥的我,每次進(jìn)來(lái)看著就感覺(jué)不爽,想著自己每天記得提交點(diǎn)東西,爭(zhēng)取像阮一峰大神一樣,每天都有提交記錄。 showImg(https://www.wty90.co...

    ChanceWong 評(píng)論0 收藏0
  • 把手教你使用Hexo + Github Pages搭建個(gè)人獨(dú)立博客

    摘要:設(shè)置什么是本用于介紹托管在的項(xiàng)目,不過(guò),由于他的空間免費(fèi)穩(wěn)定,用來(lái)做搭建一個(gè)博客再好不過(guò)了。你可以通過(guò)來(lái)訪問(wèn)你的個(gè)人主頁(yè)。執(zhí)行過(guò)程中可能需要讓你輸入賬戶的用戶名及密碼,按照提示操作即可。推薦使用騰訊公益。 系統(tǒng)環(huán)境配置 要使用Hexo,需要在你的系統(tǒng)中支持Nodejs以及Git,如果還沒(méi)有,那就開始安裝吧! 安裝Node.js 下載Node.js參考地址:安裝Node.js 安裝Git...

    劉福 評(píng)論0 收藏0
  • 打造個(gè)人or團(tuán)隊(duì)適用開源項(xiàng)目規(guī)范

    摘要:打造個(gè)人團(tuán)隊(duì)適用的開源項(xiàng)目規(guī)范是一個(gè)用來(lái)優(yōu)化托管在上的多代碼庫(kù)的工作流的一個(gè)管理工具可以讓你在主項(xiàng)目下管理多個(gè)子項(xiàng)目,從而解決了多個(gè)包互相依賴,且發(fā)布時(shí)需要手動(dòng)維護(hù)多個(gè)包的問(wèn)題。 打造個(gè)人or團(tuán)隊(duì)適用的開源項(xiàng)目規(guī)范 lerna Lerna 是一個(gè)用來(lái)優(yōu)化托管在gitnpm上的多package代碼庫(kù)的工作流的一個(gè)管理工具,可以讓你在主項(xiàng)目下管理多個(gè)子項(xiàng)目,從而解決了多個(gè)包互相依賴,且發(fā)布...

    huangjinnan 評(píng)論0 收藏0
  • 工程搭建---代碼風(fēng)格統(tǒng)一

    摘要:為此我們需要安裝這個(gè)是用于提交代碼的鉤子函數(shù)安裝完之后,我們就需要在增加運(yùn)行鉤子函數(shù)。等鉤子函數(shù)這樣就簡(jiǎn)單的成功對(duì)代碼進(jìn)行效驗(yàn)了,當(dāng)然這邊更進(jìn)一步的可以使用這個(gè)可以將取得所有被提交的文件依次執(zhí)行寫好的任務(wù)。 一個(gè)項(xiàng)目是會(huì)有多個(gè)成員來(lái)開發(fā)的,因此統(tǒng)一開發(fā)規(guī)范是很有必要的,不然每個(gè)人都有自己的風(fēng)格,同步之后代碼都會(huì)報(bào)錯(cuò)。我這邊是用Vscode編譯器的。 首先用vue-cli3.0創(chuàng)建一個(gè)工...

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

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

0條評(píng)論

kel

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<