下午的时候写了一篇关于一个不成熟的模板引擎的博客,觉得还是不太够,然后就封装了起来,做成了一款开发包。最后为了尝试一下如何发布自己的包,就又完善了一下。做此文以记之。


初衷

说来也不是什么高大上的东西,就是个简单的字符串格式化的实现。灵感还是源自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

npm install str-format --save

然后就可以在你的代码中使用如下语法来使用它了。

var str_format = require('str-format');

local module

第二种就是当作本地包来使用,具体可以这么做:

https://github.com/guoruibiao/have-fun-in-node/tree/master/str-format

下载完整代码,然后通过本地引用的方式来加载。

var str_format = require('./str-format/index');

这样也能使用这个模块的相关功能了。

打包发布

回到正题,下面讲讲我的打包发布的流程。

目录

创建好一个目录,我的目录结构如下:

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

然后根据终端里面的提示信息进行填写即可。

发布

发布之前确保自己有npm的账号。如果没有,就到

https://www.npmjs.com/signup

来注册即可。

注册完毕之后就可以使用npm publish来发布你的包了。

进入到模块的目录下,输入命令npm publish,如果出现下面的信息,则说明你需要一个登录会话,通过npm adduser进行登录即可。

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

有了登录的会话之后就可以发布了。如下:

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

这样我便发不了自己的第一个模块了。

取消发布

取消发布的前提也需要在登录会话下进行。

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

核实

发布完成之后就可以到下面的网址进行搜索,看看你的包到底发布成功了没有。

https://www.npmjs.com/package/package

查看详情内容,默认显示书写的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 北京

大致就是这样了,第一版比较仓促,后序功能可能会慢慢的进行添加的。

打包发布自己的nodejs包的更多相关文章

  1. .NET Core +NuGet 创建打包发布自己的类库包

    1. 创建类库项目 你可以使用现有的 .NET 类库项目用于要打包的代码,或者创建一个简单的项目,.NET CORE 2.1 项目的 类库如下所示: NugetDemo.class using Sys ...

  2. python文件打包发布(引用的包也可以加进来),打包出错解决了,运行出错解决了

    一开始,我以为,打包本来就很容易,可是没有..... 没想到打包还能遇到坑 T.T 打包步骤: 1.安装 pyinstaller (cmd) pip install pyinstaller 2.进入目 ...

  3. 创建自己的library类库包并使用webpack4.x打包发布到npm

    创建自己的library类库包并使用webpack4.x打包发布到npm 我们在开发过程中,可能经常要使用第三方类库,比如jquery.lodash等.我们通过npm,下载安装完之后,就可以使用了,简 ...

  4. 通过NPM快速发布你的NodeJS模块(组件包)

    1.更新 NPM - [ npm install -g npm | 该步骤可选:最好使用新版本] 楼主当前版本号 2.6.1 ,如果更新报错,可以尝试 国内淘宝镜像 $ npm -v 2.6.1 // ...

  5. 发布nuget包的正确姿势---cicd自动打包发布nuget包

    最轻便的发布nuget包方式,方便cicd自动打包发布nuget包 首先新建项目 项目名随便取,这里就叫它GuiH.ClassLibrary 默认即可,需要改目标版本时,等创建好再改 项目创建好了 随 ...

  6. 使用NuGet发布自己的类库包(Library Package)

    STEP 1:注册并获取API Key 首先,你需要到NuGet上注册一个新的账号,然后在My Account页面,获取一个API Key,这个过程很简单,我就不作说明了. STEP 2:下载NuGe ...

  7. 服务器(Liunx)打包发布java web工程

    Liunx服务器上打包发布web工程(开发工具Idea) 1.首先使用Idea自带的打包功能(点击package打包) 2.然后链接到服务器(我这里用的是Xshell链接工具) 3.将打好的war包传 ...

  8. Ant自动编译打包&发布 android项目

    Eclipse用起来虽然方便,但是编译打包android项目还是比较慢,尤其将应用打包发布到各个渠道时,用Eclipse手动打包各种渠道包就有点不切实际了,这时候我们用到Ant帮我们自动编译打包了. ...

  9. [3d跑酷] Xcode5 打包 发布配置

    主题 Unity导出Xcode项目,使用Xocde打包ipa并提交到AppStore xcode发布配置 1.设置发布相关参数,比如 包名,版本,证书,ios设备版本 2.设置体系结构,支持的平台(I ...

随机推荐

  1. day4-迭代器、生成器yield

    一.迭代器 迭代器是访问集合元素的一种方式.迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后退,不过这也没什么,因为人们很少在迭代途中往后退.另外,迭代器的一大优 ...

  2. 再谈WinIO初始化异常

    再谈WinIO初始化异常     前段时间WinIO在我的新项目中总是初始化失败,有时候又是好好的,很让人费解.修改了源代码显示了很多调试信息后,也没有什么太多的收获.由于我们的工控卡必须要用这个库, ...

  3. redis 笔记04 服务器、复制

    服务器 1. 一个命令请求从发送到完成主要包括以下步骤: 1). 客户端将命令请求发送给服务器 2). 服务器读取命令请求,并分析出命令参数 3). 命令执行器根据参数查找命令的实现函数,然后执行实现 ...

  4. Building an FTP Test Plan

    参考:http://jmeter.apache.org/usermanual/build-ftp-test-plan.html 1.创建一个线程组 2.线程组--->添加--->配置元件- ...

  5. Python单元测试框架——unittest

    测试的常用规则 一个测试单元必须关注一个很小的功能函数,证明它是正确的: 每个测试单元必须是完全独立的,必须能单独运行.这样意味着每一个测试方法必须重新加载数据,执行完毕后做一些清理工作.通常通过se ...

  6. Django-JS实现的ajax

    JS实现的ajax ajax的优缺点 AJAX使用Javascript技术向服务器发送异步请求 AJAX无须刷新整个页面 因为服务器响应内容不再是整个页面,而是页面中的局部,所以AJAX性能高 小练习 ...

  7. NOIP 马拦过河卒

    描述 棋盘上A点有一个过河卒,需要走到目标B点.卒行走的规则:可以向下.或者向右.同时在棋盘上C点有一个对方的马,该马所在的点和所有跳跃一步可达的点称为对方马的控制点.因此称之为“马拦过河卒”. 棋盘 ...

  8. 利用MacBookPro入侵无线网络

    目前无线网络的加密方式主要有WEP,WPA/WPA2.这是最常看到的加密方式,最近由于需要,专门去研究了一下如何入侵无线网络. 1.入侵WEP加密的无线网络 WEP加密方式现在已经很不安全了,因为只要 ...

  9. Linux系统中的screen命令基本使用教程

    作为linux服务器管理员,经常要使用ssh登陆到远程linux机器上做一些耗时的操作. 也许你遇到过使用telnet或SSH远程登录linux,运行一些程序.如果这些程序需要运行很长时间(几个小时) ...

  10. [BZOJ1823]满汉全席

    Description 满汉全席是中国最丰盛的宴客菜肴,有许多种不同的材料透过满族或是汉族的料理方式,呈现在數量繁多的菜色之中.由于菜色众多而繁杂,只有极少數博学多闻技艺高超的厨师能够做出满汉全席,而 ...