下午的時候?qū)懥艘黄P(guān)于一個不成熟的模板引擎的博客,覺得還是不太夠,然后就封裝了起來,做成了一款開發(fā)包。最后為了嘗試一下如何發(fā)布自己的包,就又完善了一下。做此文以記之。
初衷
說來也不是什么高大上的東西,就是個簡單的字符串格式化的實現(xiàn)。靈感還是源自Python。寫過Python代碼的應(yīng)該都知道字符串類有這么一個方法。
string = "hello {}".format("郭璞") # hello 郭璞
string = "hello {username}".format(username="郭璞") # hello 郭璞
然后對于其他語言來說,比如C, Nodejs,Java等也都有類似的實現(xiàn),但是不是很好用,尤其是記憶一大串什么%s, %d, %f,之類的,一點(diǎn)都不好玩了。
當(dāng)然了,你也可以不用這些字符串格式化的方法,單純的使用字符串相加的方式。比如:
str = "Hello" + username + ", are you " +anothername+ "?";
這還是變量很少的情況,試想一下。如果你有20個變量要與字符串進(jìn)行拼接,那該是個什么工作量。不出錯還好,一旦出錯,罵街的?都有了。況且在Node中,單引號和雙引號都可以正常的表示字符串對象,這只能讓你的字符串拼接顯得更加舉步維艱。
功能
下面給個小例子,一定能讓你眼前一亮。
const str_format = require('str-format');
var str = "Hello {}!Welcome to {address}!\nAre you come from {} or {china.beijing}.";
var params = ['游客', {address: "冰雹工作室"}, '朝陽區(qū)', {china: {beijing: '北京'}}];
var result = str_format.format(str, params);
console.log(result);
運(yùn)行一下代碼,會有如下結(jié)果。
Hello 游客!Welcome to 冰雹工作室!
Are you come from 朝陽區(qū) or 北京.
就跟Python中原生處理字符串格式化一樣,這樣寫起來字符串就會變得很方便啦。
使用
使用它很方便,有這么兩種方式:
npm
npm install str-format --save
然后就可以在你的代碼中使用如下語法來使用它了。
var str_format = require('str-format');
local module
第二種就是當(dāng)作本地包來使用,具體可以這么做:
到https://github.com/guoruibiao/have-fun-in-node/tree/master/str-format
下載完整代碼,然后通過本地引用的方式來加載。
var str_format = require('./str-format/index');
這樣也能使用這個模塊的相關(guān)功能了。
打包發(fā)布
回到正題,下面講講我的打包發(fā)布的流程。
目錄
創(chuàng)建好一個目錄,我的目錄結(jié)構(gòu)如下:
E:\Code\Nodejs\learn\my-work\string\str-format>tree /f .
卷 文檔 的文件夾 PATH 列表
卷序列號為 0000-4823
E:\CODE\NODEJS\LEARN\MY-WORK\STRING\STR-FORMAT
index.js # 功能模塊
package.json # npm init 命令生成的文件
README.md # Markdown語法描述的模塊信息
沒有子文件夾
package.json
如上面目錄中看到的package.json文件,其是由npm init命令生成的。在這個目錄下打開命令行輸入
npm init
然后根據(jù)終端里面的提示信息進(jìn)行填寫即可。
發(fā)布
發(fā)布之前確保自己有npm的賬號。如果沒有,就到
https://www.npmjs.com/signup
來注冊即可。
注冊完畢之后就可以使用npm publish來發(fā)布你的包了。
進(jìn)入到模塊的目錄下,輸入命令npm publish,如果出現(xiàn)下面的信息,則說明你需要一個登錄會話,通過npm adduser進(jìn)行登錄即可。
E:\Code\Nodejs\learn\my-work\string\str-format>npm publish
npm ERR! Windows_NT 10.0.10586
npm ERR! argv "D:\\Software\\Nodejs\\node.exe" "D:\\Software\\Nodejs\\node_modules\\npm\\bin\\npm-cli.js" "publish"
npm ERR! node v6.10.2
npm ERR! npm v3.10.10
npm ERR! code ENEEDAUTH
npm ERR! need auth auth required for publishing
npm ERR! need auth You need to authorize this machine using `npm adduser`
npm ERR! Please include the following file with any support request:
npm ERR! E:\Code\Nodejs\learn\my-work\string\str-format\npm-debug.log
有了登錄的會話之后就可以發(fā)布了。如下:
E:\Code\Nodejs\learn\my-work\string\str-format>npm adduser
Username: marksinoberg
Password:
Email: (this IS public) 1064319632@qq.com
Logged in as marksinoberg on https://registry.npmjs.org/.
E:\Code\Nodejs\learn\my-work\string\str-format>npm publish
+ str-format@1.0.0
這樣我便發(fā)不了自己的第一個模塊了。
取消發(fā)布
取消發(fā)布的前提也需要在登錄會話下進(jìn)行。
npm unpublish
如果不成功,或許需要強(qiáng)制取消。
npm unpublish --force
取消發(fā)布之后,如果要再次發(fā)布,那么需要改變一下版本號。比如我之前是1.0.0,如果我取消發(fā)布之后想再發(fā)布一次,那么版本號就需要變一下了。比如可以是1.0.1。沒什么嚴(yán)格的要求,但是版本號默認(rèn)遞增順序。
E:\Code\Nodejs\learn\my-work\string\str-format>npm publish
+ str-format@1.0.1
核實
發(fā)布完成之后就可以到下面的網(wǎng)址進(jìn)行搜索,看看你的包到底發(fā)布成功了沒有。
https://www.npmjs.com/package/package
查看詳情內(nèi)容,默認(rèn)顯示書寫的README.md文件的內(nèi)容。
后話
需要注意的是在字符串中也有不能出現(xiàn)的類型,這跟Python保持了一致。
數(shù)組類型
const str_format = require('str-format');
var str = "Hello {}!Welcome to {address}!\nAre you come from {} or {china.beijing}.";
var params = ['游客', {address: "冰雹工作室"}, ['朝陽區(qū)', '海淀區(qū)'], {china: {beijing: '北京'}}];
var result = str_format.format(str, params);
console.log(result);
結(jié)果只會匹配第一個數(shù)據(jù)項:
Hello 游客!Welcome to 冰雹工作室!
Are you come from 朝陽區(qū) or 北京
大致就是這樣了,第一版比較倉促,后序功能可能會慢慢的進(jìn)行添加的。