摘要:后言有了我們可以做很多很多的事情以后開(kāi)發(fā)新模塊的時(shí)候就可以偷懶了純手打給個(gè)贊可好模版
前言
最近寫(xiě)項(xiàng)目開(kāi)發(fā)新模塊的時(shí)候,每次寫(xiě)新模塊的時(shí)候需要?jiǎng)?chuàng)建一個(gè)組件的時(shí)候(包含組件css,index.js,組件js),就只能會(huì)拷貝其他組件修改名稱 ,但是寫(xiě)了1-2個(gè)后發(fā)現(xiàn)效率太低了,而且極容易出錯(cuò),所以自己寫(xiě)一個(gè)npm包來(lái)減少工作量,下面就一步一步來(lái)創(chuàng)建一個(gè)屬于自己的npm倉(cāng)庫(kù)
首先第一步創(chuàng)建一個(gè)package.json文件,打開(kāi)終端,輸入以下命令:
npm init
然后會(huì)依次提示項(xiàng)目名稱、版本、項(xiàng)目描述、入口文件...一直回車,直到出現(xiàn)Is this ok? (yes) ,然后輸入yes,創(chuàng)建一個(gè)package.json文件就完成了,接下來(lái)在根目錄創(chuàng)建一個(gè)index.js文件,文件內(nèi)容為:
#!/usr/bin/env node //告訴node使用終端運(yùn)行 const fs = require("fs"); //文件系統(tǒng) const program = require("commander"); //終端輸入處理框架 const package = require("./package.json"); //獲取版本信息 program.version(package.version, "-v,--version") .command("init") .action(name=>{ console.log(name) }) program.parse(process.argv);
安裝commander:
cnpm i -d commander
接下來(lái)我們就可以看看效果,安裝執(zhí)行
node index.js -v 輸出:1.0.0 node index.js init header 輸出:header node index.js -h 輸出: Usage: index [options] [command] Options: -v,--version output the version number -h, --help output usage information Commands: init
代碼正常運(yùn)行,接下來(lái)修改package.json里面bin,增加以下代碼:
"bin": { "temp": "index.js" },
到這里我們第一步就算完成了,怎么發(fā)布npm包呢?流程如下:
首先在[npm官網(wǎng)][1]中注冊(cè)賬號(hào)(如有忽略)
注冊(cè)完執(zhí)行npm adduser 依次輸入帳號(hào),密碼,郵箱,
npm version patch
npm publish就可以提交了
npm發(fā)布流程踩過(guò)的坑
使用npm提交,不要使用cnpm
每次修改都需要修改版本號(hào)npm version patch
項(xiàng)目名稱 npm倉(cāng)庫(kù)是否有這個(gè)項(xiàng)目
發(fā)布成功后,我們?nèi)职惭b,剛剛我提交的項(xiàng)目名稱為template-react-cli,所以執(zhí)行全局安裝,使用npm安裝,cnpm會(huì)有短暫延遲
npm i template-react-cli -g temp -v 輸出:1.0.0 temp init footer 輸出: footer
屬于我們的npm可以正常使用了,接下來(lái)豐富我們的npm包,先安裝依賴:
cnpm i -d download-git-repo handlebars inquirer log-symbols ora
安裝完成后,豐富我們的功能index.js文件如下:
#!/usr/bin/env node const fs = require("fs"); const program = require("commander"); const download = require("download-git-repo"); //下載模版文件 const chalk = require("chalk"); //美化終端 const symbols = require("log-symbols"); //美化終端 const handlebars = require("handlebars"); //修改模版文件內(nèi)容 const ora = require("ora"); //提示下載 var inquirer = require("inquirer"); //提示文本 const package = require("./../package.json"); //獲取版本信息 const re = new RegExp("^[a-zA-Z]+$"); //檢查文件名是否是英文,只支持英文 program .version(package.version, "-v,--version") .command("init") .action(name => { if (!re.test(name)) { //檢查文件名是否是英文 console.log(symbols.error, chalk.red("錯(cuò)誤!請(qǐng)輸入英文名稱")); return } if (!fs.existsSync(name)) { //檢查項(xiàng)目中是否有該文件 inquirer .prompt([ { type: "list", name: "type", message: "請(qǐng)選擇模版類型?", choices: [ "react-component------ES6組件", "react-function------函數(shù)組件", "react-redux------ES6組件", ], }, ]) .then(answers => { //用戶選擇后回調(diào) console.log(symbols.success,chalk.green("開(kāi)始創(chuàng)建..........,請(qǐng)稍候")); const spinner = ora("正在下載模板..."); spinner.start(); const type = getType(answers) download(`github:NewPrototype/template/#${type}`, name, err => { if (err) { spinner.fail(); } else { spinner.succeed(); var files = fs.readdirSync(name); for(let i=0;i { if (err) { console.log("---錯(cuò)誤"); } count++; if (count+1 == files.length) { //排除index.js文件 console.log(symbols.success, chalk.green("模版創(chuàng)建成功")); } } ); } } }); }); } else { console.log(symbols.error, chalk.red("有相同名稱模版")); } }); program.parse(process.argv); const getType = (type) => { let str = "master"; switch (type.type) { case "react-component------ES6組件": str = "component" break; case "react-function------函數(shù)組件": str = "master" break; case "react-redux------ES6組件": str = "redux" break; default: break; } return str }
然后重新提交文件到npm倉(cāng)庫(kù),方法和上面發(fā)布流程一樣,發(fā)布完成后:
npm i template-react-cli -g 先檢查版本號(hào) temp -v 輸出:1.02 然后檢查功能: temp init header 輸出:? 請(qǐng)選擇模版類型? (Use arrow keys) ? react-component------ES6組件 react-function------函數(shù)組件 react-redux------ES6組件 選擇想要的選項(xiàng),回車 輸出:? 開(kāi)始創(chuàng)建..........,請(qǐng)稍候 ? 正在下載模板... 等待下載完成 輸出:? 模版創(chuàng)建成功
可以看到當(dāng)前目錄下面創(chuàng)建了一個(gè)header文件夾,里面包含js文件和stylcss文件,到這里整個(gè)流程就完成了,這里是下載了模版文件模版地址,大家也可以寫(xiě)出符合自己風(fēng)格的模版文件。
有了node我們可以做很多很多的事情,以后開(kāi)發(fā)新模塊的時(shí)候就可以偷懶了!純手打給個(gè)贊可好?
githubhttps://github.com/NewPrototy...
模版githubhttps://github.com/NewPrototy...
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/96793.html
摘要:另外一方面,即使不是想搭建自己的工作流,而是使用現(xiàn)成的腳手架,大家都會(huì)用。顯然,徹底掌握如何從零開(kāi)始搭建一個(gè)能夠貼近實(shí)際項(xiàng)目的工作流,是一個(gè)想要滿足工作最基本要求的人必備的技能。 很多人想搭建一套屬于自己的前端工作流,最開(kāi)始的時(shí)候我們的工作流萌芽是從寫(xiě)一個(gè)項(xiàng)目的時(shí)候,拷貝以前寫(xiě)過(guò)的一個(gè)項(xiàng)目文件夾改完直接使用開(kāi)始的,后來(lái)使用了grunt和gulp,再到webpack,每一個(gè)前端人員想掌握...
摘要:但如果你想更加高效地使用來(lái)開(kāi)發(fā),成為大師,那下面我要傳授的這五招你一定得認(rèn)真學(xué)習(xí)一下了。雖然損失了一丟丟性能,但避免了無(wú)限的。所以我們需要設(shè)置,這些默認(rèn)行為將會(huì)被去掉以上兩點(diǎn)的優(yōu)化才能成功。陸續(xù)可能還會(huì)更新一些別的招數(shù),敬請(qǐng)期待。 本文面向?qū)ο笫怯幸欢╒ue.js編程經(jīng)驗(yàn)的開(kāi)發(fā)者。如果有人需要Vue.js入門系列的文章可以在評(píng)論區(qū)告訴我,有空就給你們寫(xiě)。 對(duì)大部分人來(lái)說(shuō),掌握Vue.j...
摘要:優(yōu)化代碼拆分從入口文件開(kāi)始,遞歸地構(gòu)建了整個(gè)應(yīng)用的模塊依賴圖表,然后通常會(huì)將所有的模塊打包成一個(gè)。 如果你還不知道什么是React,請(qǐng)點(diǎn)擊這里github源碼 安裝Node.js 如果你還不知道什么是ECMAScript,請(qǐng)點(diǎn)擊這里 如果你還不知道什么是Node.js,請(qǐng)點(diǎn)擊這里 下載Node.js并安裝;接著打開(kāi)windows命令行窗口分別輸入node -v及npm -v如下圖所示,...
摘要:通過(guò)文件可以對(duì)圖標(biāo)名稱等信息進(jìn)行配置。注意,注冊(cè)的只在生產(chǎn)環(huán)境中生效,并且該功能只有在下才能有效果該文件是過(guò)濾文件配置該文件是描述文件定義了項(xiàng)目所需要的各種模塊,以及項(xiàng)目的配置信息比如名稱版本許可證等元數(shù)據(jù)。 一、 快速開(kāi)始: 全局安裝腳手架: $ npm install -g create-react-app 通過(guò)腳手架搭建項(xiàng)目: $ create-react-app 開(kāi)始項(xiàng)目: ...
摘要:通過(guò)文件可以對(duì)圖標(biāo)名稱等信息進(jìn)行配置。注意,注冊(cè)的只在生產(chǎn)環(huán)境中生效,并且該功能只有在下才能有效果該文件是過(guò)濾文件配置該文件是描述文件定義了項(xiàng)目所需要的各種模塊,以及項(xiàng)目的配置信息比如名稱版本許可證等元數(shù)據(jù)。 一、 快速開(kāi)始: 全局安裝腳手架: $ npm install -g create-react-app 通過(guò)腳手架搭建項(xiàng)目: $ create-react-app 開(kāi)始項(xiàng)目: ...
閱讀 3298·2021-09-22 15:05
閱讀 2854·2019-08-30 15:56
閱讀 1122·2019-08-29 17:09
閱讀 864·2019-08-29 15:12
閱讀 2141·2019-08-26 11:55
閱讀 3225·2019-08-26 11:52
閱讀 3433·2019-08-26 10:29
閱讀 1427·2019-08-23 17:19