摘要:其實(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.json的script中添加如下
// 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
摘要:但是,畢竟是人,哪天忙了就會(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...
摘要:設(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...
摘要:打造個(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ā)布...
摘要:為此我們需要安裝這個(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è)工...
閱讀 2692·2023-04-25 20:19
閱讀 1955·2021-11-24 09:38
閱讀 1640·2021-11-16 11:44
閱讀 4392·2021-09-02 15:40
閱讀 1362·2019-08-30 15:55
閱讀 2032·2019-08-30 15:52
閱讀 3774·2019-08-29 17:20
閱讀 2291·2019-08-29 13:48