<span style="font-family:Arial, Helvetica, sans-serif;background-color:rgb(255,255,255);">近日当我在使用npm上已经存在的一个包时,发现它有bug;于是决定自己实现这个功能,自己写一个npm包。</span> 

下面我记录一下自己的实现过程。

1. npm init

选择一个文件夹,然后用命令行cd进去,然后执行npm init,这时会生成一长串表单,根据自己的实际情况填写内容

name:填写你这个包的名字,默认是你这个文件夹的名字。不过这里要着重说一下,最好先去npm上找一下有没有同名的包。最好的测试方式就是,在命令行里面输入npm install 你要取的名字,如果报错,那么很好,npm上没有跟你同名的包,你可以放心大胆地把包发布出去。如果成功下载下来了。。。那么很不幸,改名字吧。。。

version:你这个包的版本,默认是1.0.0

description:其实我也不知道是什么,按回车就好了。。。,这个用一句话描述你的包是干嘛用的

entry point:入口文件,默认是Index.js,你也可以自己填写你自己的文件名

test command:测试命令,这个直接回车就好了,因为目前还不需要这个。

git repository:这个是git仓库地址,如果你的包是先放到github上或者其他git仓库里,这时候你的文件夹里面会存在一个隐藏的.git目录,npm会读到这个目录作为这一项的默认值。如果没有的话,直接回车继续。

keyword:这个是一个重点,这个关系到有多少人会搜到你的npm包。尽量使用贴切的关键字作为这个包的索引。我这个包嘛,第一是在express下工作的,然后又是一个插件plugin,然后又是一个注册路由route用的,而这个路由又是基于文件目录dir,所以很好就得出我的包的索引关键字。

author:写你的账号或者你的github账号吧

license:这个直接回车,开源文件来着。。。

然后它就会问你Are you ok?

回车Ok!

然后我们回到我们的文件目录里面去看一看,发现多出来一个package.json文件

然后,在目录下新建一个index.js文件,或者你刚才修改了那个entry point的值,那么你这个文件名也跟着改为那个值。

我的npm工程目录结构就是这样的,注意其中的bin文件夹是我为了制作命令行工具才生成的,后面会讲到怎么生成命令行工具;当然,如果那不想生成命令行工具,这个文件夹就不需要了。

因为我把封装好的代码都扔在lib里面,所以,index.js里面也就一句话:

module.exports=require('./lib')

然后,最重要的,写好README.md,一个给大家描述你的包的markdown文件,如果大家都不知道你的代码是做什么的,会有人去下载你的代码吗?哦,对了,最好写英文。

2. npm publish

写完自己的npm包,测试运行没问题后就可以发布到npm上

首先得注册个npm帐号

用npm命令登陆一下

然后,在你的目录下使用npm publish

注意:一般情况下,一旦你要修改你已经发布后的代码,然后又要执行发布操作,务必到package.json里面,把version改一下,比如从1.0.0改为1.0.1,然后在执行npm publish,这样就可以成功发布了。

3. 生成命令行工具

在使用 Nodejs 过程中,有很多包都支持全局安装,提供一个命令,然后在命令行我们就可以完成一些任务。有时候我们也需要开发这样的命令工具。在Node.js 中发现弄个命令行工具特别轻松。我使用的是commander包来生成命令行工具

$ npm install commander

然后cd到bin目录下,新建一个.js文件(名字自取),编写代码,在js文件顶部加上#!/usr/bin/env node

例如我的geAsar.js:

#!/usr/bin/env node
var asar = require('../lib/geAsar')
var program = require('commander');

program.version('v'   require('../package.json').version)
  .description('Manipulate asar archive files')

program.command('pack <dir> <output>')
  .alias('p')
  .description('create asar archive')
  .action(function (__dirpath, output) {
   asar.geAsar(__dirpath,output);
   console.log(output "文件成功生成");
  })
program.parse(process.argv)

if (program.args.length === 0) {
 program.help()
}

然后还需在package.json中添加

"bin": { 
 "geAsar": "./bin/geAsar.js" 
 }, 

运行 node bin/geAsar.js 会显示当前文件夹下的所以文件和文件夹名。这个玩意儿真的跑起来了.

全局运行命令调试

install

如果在项目目录下运行没有问题,可以将当前目录模块安装到全局,也可以采用此方法来更新你的命令行工具

sudo npm install . -g

link

或者目录输入 npm link 会自动添加全局的 symbolic link ,然后就可以使用自己的命令了。 (我用的是这个)

以上这篇Nodejs 发布自己的npm包并制作成命令行工具的实例讲解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持Devmax。

Nodejs 发布自己的npm包并制作成命令行工具的实例讲解的更多相关文章

  1. xcode – 如何通过LLDB命令行添加断点操作?

    如果你从Xcode编辑一个断点,有一个超级有用的选项,可以添加一个“Action”,以便在每次遇到断点时自动执行.如何从LLDB命令行添加此类操作?

  2. 在Sierra上,Brew安装错误单独使用Xcode是不够的

    我正在尝试使用HomeBrewv1.3.8在运行xCodev9.1的MacOSXSerrav10.12.6上安装软件包.安装和错误是然后我运行命令表示软件更新服务器无法使用命令行工具包.我进入xCode,它表明安装了命令行工具.任何帮助将非常感激.西奥解决方法我去了AppleDeveloper网站并直接下载了命令行工具dmg.首先需要设置Apple帐户.命令行工具可在以下位置找到–https://

  3. ios – 通过真实设备上的命令行进行UIAutomation

    提前谢谢解决方法您需要为其提供.ipa文件的路径.它实际上只需要应用程序名称,因此您只需传入应用程序名称即可.非常重要:应用程序需要安装在设备上,Instruments不会在设备上安装应用程序,它只会在设备上运行已安装的应用程序

  4. ios7 – Xcode 5命令行代码签名错误

    有没有人遇到过Xcode5(Build版本5A11344j)命令行工具无法在Xcode4.6.3(Build版本4H1503)中构建以前成功构建的项目的情况.错误消息如下:“检查依赖项代码签名错误:未找到代码签名标识:未找到与构建设置(“”)中指定的配置文件匹配的代码签名标识(即证书和私钥对).CodeSign错误:SDK“iOS7.0”中的产品类型“应用”需要代码签名“非常感谢任何见解.谢谢!解

  5. 安装命令行工具Xcode 5

    我已经尝试过并尝试过但我仍然无法解决问题.我正在尝试安装PebbleSDK1.12并安装Xcode5的命令行工具.每次我在终端尝试xcode-select–install时,我都会收到“无法安装软件,因为它目前在软件更新服务器中不可用”我试图重新安装Xcode,但是没有用.当我进入Xcode-preferences-downloads时,没有命令行工具的部分.我也试过从开发者网站安装它们但无济于事.下载看起来正确,然后我去Xcode看到首选项,并没有列出命令行工具.你们都能提出什么建议吗?

  6. xcode – 命令行工具的静态分析器问题

    我们通过使用TeamCity/命令行工具自动化我们当前项目的构建.为了确保尽可能多地捕获潜在的问题,我们已经将项目设置为对每个构建使用静态分析器.几个第三方课程被分析仪标记,所以我们排除了可疑类,标记为:一切都按照预期的方式编译在Xcode中(用4.6.3和5.0.1测试).但是,当在TeamCity服务器上编译时,我们会收到每个排除的第三方文件的以下错误:如果我们删除了-Xanalyzer-an

  7. 从命令行确定Xcode派生的数据位置

    有没有办法从命令行确定您的派生数据文件夹的位置是用xcodebuild构建后的?

  8. Xcode 7:无法使用单元测试目标创建Swift命令行工具

    我受阻了如果我创建一个MacOSCocoa应用程序,我可以免费获得一个单元测试目标.但是我想编写一个命令行工具,并写一些单元测试.如果我能弄清楚,我会被伤害我已经足够远,我有一个命令行目标和一个测试目标.我可以“@testableimport”我的commnd行模块,并使用测试代码中的代码,Xcode中没有错误.但是,一旦我尝试运行我的测试,我得到一个链接错误.主模块中的任何类都不能链接.什么?

  9. 如何从命令行中删除iOS 8 Simulator中的应用程序?

    我有一个在iOS模拟器中运行的自动化,我必须在另一次运行之前删除.如何从命令行从iOS模拟器中删除该应用程序?

  10. macos – KeyChain安全命令行工具使用find-internet-passwords但不能使用find-generic-passwords

    研究如何使用KeyChain的命令行工具.我能够通过安全做很多事情;列出我的多个钥匙串,转储它们并设置默认值.阅读教程和其他帖子我希望找到我的密码安全查找–通用–密码测试但我明白了security:SecKeychainSearchcopyNext:ThespecifieditemCouldnotbefoundinthekeychain.这不适用于我的默认钥匙串或login.keychain.但是

随机推荐

  1. Error: Cannot find module ‘node:util‘问题解决

    控制台 安装 Vue-Cli 最后一步出现 Error: Cannot find module 'node:util' 问题解决方案1.问题C:\Windows\System32>cnpm install -g @vue/cli@4.0.3internal/modules/cjs/loader.js:638 throw err; &nbs

  2. yarn的安装和使用(全网最详细)

    一、yarn的简介:Yarn是facebook发布的一款取代npm的包管理工具。二、yarn的特点:速度超快。Yarn 缓存了每个下载过的包,所以再次使用时无需重复下载。 同时利用并行下载以最大化资源利用率,因此安装速度更快。超级安全。在执行代码之前,Yarn 会通过算法校验每个安装包的完整性。超级可靠。使用详细、简洁的锁文件格式和明确的安装算法,Yarn 能够保证在不同系统上无差异的工作。三、y

  3. 前端环境 本机可切换node多版本 问题源头是node使用的高版本

    前言投降投降 重头再来 重装环境 也就分分钟的事 偏要折腾 这下好了1天了 还没折腾出来问题的源头是node 使用的高版本 方案那就用 本机可切换多版本最终问题是因为nodejs的版本太高,导致的node-sass不兼容问题,我的node是v16.14.0的版本,项目中用了"node-sass": "^4.7.2"版本,无法匹配当前的node版本根据文章的提

  4. nodejs模块学习之connect解析

    这篇文章主要介绍了nodejs模块学习之connect解析,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  5. nodejs npm package.json中文文档

    这篇文章主要介绍了nodejs npm package.json中文文档,本文档中描述的很多行为都受npm-config(7)的影响,需要的朋友可以参考下

  6. 详解koa2学习中使用 async 、await、promise解决异步的问题

    这篇文章主要介绍了详解koa2学习中使用 async 、await、promise解决异步的问题,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  7. Node.js编写爬虫的基本思路及抓取百度图片的实例分享

    这篇文章主要介绍了Node.js编写爬虫的基本思路及抓取百度图片的实例分享,其中作者提到了需要特别注意GBK转码的转码问题,需要的朋友可以参考下

  8. CentOS 8.2服务器上安装最新版Node.js的方法

    这篇文章主要介绍了CentOS 8.2服务器上安装最新版Node.js的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  9. node.js三个步骤实现一个服务器及Express包使用

    这篇文章主要介绍了node.js三个步骤实现一个服务器及Express包使用,文章通过新建一个文件展开全文内容,具有一定的参考价值,需要的小伙伴可以参考一下

  10. node下使用UglifyJS压缩合并JS文件的方法

    下面小编就为大家分享一篇node下使用UglifyJS压缩合并JS文件的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

返回
顶部