本文共 3284 字,大约阅读时间需要 10 分钟。
下午的时候写了一篇关于一个不成熟的模板引擎的博客,觉得还是不太够,然后就封装了起来,做成了一款开发包。最后为了尝试一下如何发布自己的包,就又完善了一下。做此文以记之。
说来也不是什么高大上的东西,就是个简单的字符串格式化的实现。灵感还是源自Python。写过Python代码的应该都知道字符串类有这么一个方法。
string = "hello {}".format("郭璞") # hello 郭璞string = "hello {username}".format(username="郭璞") # hello 郭璞
然后对于其他语言来说,比如C, Nodejs,Java等也都有类似的实现,但是不是很好用,尤其是记忆一大串什么%s
, %d
, %f
,之类的,一点都不好玩了。
当然了,你也可以不用这些字符串格式化的方法,单纯的使用字符串相加的方式。比如:
str = "Hello" + username + ", are you " +anothername+ "?";
这还是变量很少的情况,试想一下。如果你有20个变量要与字符串进行拼接,那该是个什么工作量。不出错还好,一旦出错,骂街的都有了。况且在Node中,单引号和双引号都可以正常的表示字符串对象,这只能让你的字符串拼接显得更加举步维艰。
下面给个小例子,一定能让你眼前一亮。
const str_format = require('str-format');var str = "Hello {}!Welcome to {address}!\nAre you come from {} or {china.beijing}.";var params = ['游客', {address: "冰雹工作室"}, '朝阳区', {china: {beijing: '北京'}}];var result = str_format.format(str, params);console.log(result);
运行一下代码,会有如下结果。
Hello 游客!Welcome to 冰雹工作室!Are you come from 朝阳区 or 北京.
就跟Python中原生处理字符串格式化一样,这样写起来字符串就会变得很方便啦。
使用它很方便,有这么两种方式:
npm install str-format --save
然后就可以在你的代码中使用如下语法来使用它了。
var str_format = require('str-format');
第二种就是当作本地包来使用,具体可以这么做:
到
下载完整代码,然后通过本地引用的方式来加载。var str_format = require('./str-format/index');
这样也能使用这个模块的相关功能了。
回到正题,下面讲讲我的打包发布的流程。
创建好一个目录,我的目录结构如下:
E:\Code\Nodejs\learn\my-work\string\str-format>tree /f .卷 文档 的文件夹 PATH 列表卷序列号为 0000-4823E:\CODE\NODEJS\LEARN\MY-WORK\STRING\STR-FORMAT index.js # 功能模块 package.json # npm init 命令生成的文件 README.md # Markdown语法描述的模块信息没有子文件夹
如上面目录中看到的package.json文件,其是由npm init命令生成的。在这个目录下打开命令行输入
npm init
然后根据终端里面的提示信息进行填写即可。
发布之前确保自己有npm的账号。如果没有,就到
来注册即可。注册完毕之后就可以使用npm publish来发布你的包了。
进入到模块的目录下,输入命令npm publish,如果出现下面的信息,则说明你需要一个登录会话,通过npm adduser进行登录即可。E:\Code\Nodejs\learn\my-work\string\str-format>npm publishnpm ERR! Windows_NT 10.0.10586npm ERR! argv "D:\\Software\\Nodejs\\node.exe" "D:\\Software\\Nodejs\\node_modules\\npm\\bin\\npm-cli.js" "publish"npm ERR! node v6.10.2npm ERR! npm v3.10.10npm ERR! code ENEEDAUTHnpm ERR! need auth auth required for publishingnpm 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
有了登录的会话之后就可以发布了。如下:
E:\Code\Nodejs\learn\my-work\string\str-format>npm adduserUsername: marksinobergPassword:Email: (this IS public) 1064319632@qq.comLogged in as marksinoberg on https://registry.npmjs.org/.E:\Code\Nodejs\learn\my-work\string\str-format>npm publish+ str-format@1.0.0
这样我便发不了自己的第一个模块了。
取消发布的前提也需要在登录会话下进行。
npm unpublish
如果不成功,或许需要强制取消。
npm unpublish --force
取消发布之后,如果要再次发布,那么需要改变一下版本号。比如我之前是1.0.0,如果我取消发布之后想再发布一次,那么版本号就需要变一下了。比如可以是1.0.1。没什么严格的要求,但是版本号默认递增顺序。
E:\Code\Nodejs\learn\my-work\string\str-format>npm publish+ str-format@1.0.1
发布完成之后就可以到下面的网址进行搜索,看看你的包到底发布成功了没有。
查看详情内容,默认显示书写的README.md文件的内容。
需要注意的是在字符串中也有不能出现的类型,这跟Python保持了一致。
const str_format = require('str-format');var str = "Hello {}!Welcome to {address}!\nAre you come from {} or {china.beijing}.";var params = ['游客', {address: "冰雹工作室"}, ['朝阳区', '海淀区'], {china: {beijing: '北京'}}];var result = str_format.format(str, params);console.log(result);
结果只会匹配第一个数据项:
Hello 游客!Welcome to 冰雹工作室!Are you come from 朝阳区 or 北京
大致就是这样了,第一版比较仓促,后序功能可能会慢慢的进行添加的。