开发发布npm module包

问题

在项目开发过程中,每当进入一个新的业务项目,从零开始搭建一套前端项目结构是一件让人头疼的事情,就要重新复制一个上一个项目的前端框架和组件代码库。其中很多功能的模块组件都要重复拷贝,可以统一将这些组件类的模块统一打包上传至npm,以后每次都只需要install一下就可以了。

前期准备工作

  • 安装nodejs
  • github上新建一个repository用于托管组件代码
  • 新建一个npm账户用于发布包

这里以工具组件库中的时间格式转换工具为例,主要用于对Date时间进行不同格式转换。

1,创建组件

新建一个用于放置时间格式转换npm包的文件夹

mkdir timeFormat

初始化配置包json文件package.json

npm init$ npm initThis utility will walk you through creating a package.json file.
It only covers the most common items, and tries to guess sane defaults.See `npm help json` for definitive documentation on these fields
and exactly what they do.Use `npm install <pkg> --save` afterwards to install a package and
save it as a dependency in the package.json file.Press ^C at any time to quit.
name: (node) timeForamt
version: (0.0.0) 0.0.1
description: An easy mongodb client for node.js based on native mongodb driver.
entry point: (index.js)
test command: make test
git repository: https://github.com/summer7310/timeformat.git
keywords: timeformat
author: summer7310
license: (BSD-2-Clause) MIT

package.json文件主要用来表述项目信息的,包括名称,版本,依赖,版权,git地址。

在文件夹下新建时间格式转化功能脚本入口文件index.js

具体代码内容:


index.js// 月(M)、日(d)、小时(h)、分(m)、秒(s)、季度(q) 可以用 1-2 个占位符,
// 年(y)可以用 1-4 个占位符,毫秒(S)只能用 1 个占位符(是 1-3 位的数字)
function timeFormat(date, fmt) {var o = {"M+": date.getMonth() + 1, //月份 "d+": date.getDate(), //日 "h+": date.getHours(), //小时 "m+": date.getMinutes(), //分 "s+": date.getSeconds(), //秒 "q+": Math.floor((date.getMonth() + 3) / 3), //季度 "S": date.getMilliseconds() //毫秒 };if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (date.getFullYear() + "").substr(4 - RegExp.$1.length));for (var k in o)if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));return fmt;
}exports.timeFormat = timeFormat;

每个组件包需要配一个测试文件用于测试,新建test.js


test.jsvar fn = require('./index.js');
var time = fn.timeFormat(new Date(), "yyyy-MM-dd");
console.log(time);

执行test

node test.js

输出:

D:\npm_test\test>node test.js
2017-12-04

表示成功

2,发布包至npm

在npm官网注册账号,https://www.npmjs.com

添加用户,输入完用户名,密码,邮箱后没有错误信息就完成了。

$ npm adduser
Username: your name
Password: your password
Email: (this IS public) your email

查看当前用户:

$npm whoami

显示当前用户名
发布包

$ npm publish

发现报错,用户没有权限发布该包,这时候去npm官网查一下,发现已经存在该名字的npm包,解决方法就是重命名我们的组件名字,改名为timeFormatUtil

再次发布,成功后我们去npm官网就能搜到该组件了

这里大概再罗列一下发布过程中可能遇到的问题和解决方法。

Q1:

npm ERR! no_perms Private mode enable, only admin can publish this module:

这里注意的是因为国内网络问题,许多小伙伴把npm的镜像代理到淘宝或者别的地方了,这里要设置回原来的镜像。


npm config set registry=http://registry.npmjs.org

Q2:

npm ERR! you do not have permission to publish "your module name". Are you logged in as the correct user?

提示没有权限,其实就是你的module名在npm上已经被占用啦,这时候你就去需要去npm搜索你的模块名称,如果搜索不到,就可以用,并且把package.json里的name修改过来,重新npm publish。

注意

每次修改组件需要重新发布都必须修改当前版本号,要不然npm会认为冲突。

3,下载使用组件

在项目中执行

npm install timeformatutil --save

执行测试文件


const fn = require('timeformatutil');
let time = fn.timeFormat(new Date(), "yyyy-MM-dd");console.log(time);

成功。

开发发布npm module包相关推荐

  1. vue-cli3封装组件库打包并发布npm开源包和npm内网私有库

    ① 使用Vue-cli3搭建项目 vue create demo vue-cli3官方文档 注:cli3 提供一个可选的 vue.config.js 配置文件.如果这个文件存在则他会被自动加载,所有的 ...

  2. 如何开发一个npm包并发布

    一.安装nodejs 不多说了,网上教程多得是 二.创建自己的npm包 目录结构 npm-test a.js b.js package.json 开发 为了简单便于理解,就开发一个简单地hello程序 ...

  3. vue css load,vue css3loadding插件的开发以及npm包的发布管理

    插件开发的话建议使用vue-gitment脚手架开发 vue init webpack-simple vue-gitment 如果提示 执行cnpm install vue-cli -g 全局安装 c ...

  4. npm 删除依赖包_前端开发,npm会了吗?

    npm 是Node.js的包管理工具(package manager),npm 由三个独立的部分组成: 网站(开发者查找包,设置参数以及管理npm的主要途径) 注册表(保存每个包(package)的信 ...

  5. 怎么开发一个npm包

    一.注册npm账号 * 怎么将代码提到github,大家都知道需要一个github账号 * 同样,开发一个npm包,当然也需要一个npm账号,将npm包发布到npm的托管服务器 * 注册地址:[htt ...

  6. 不会发布npm包?进来看看?

    前言 npm(Node Package Manager),一个Node的包管理器,平时我们常用的公共模块(插件)或者叫做包大多都放在上面,所以接下来要封装的插件,我们就简单称它为npm包,本文从就从这 ...

  7. 发布npm包时遇到的问题及解决方法

    发布npm包时遇到的问题及解决方法 1.出现这个错误 no_perms Private mode enable, only admin can publish this module 错误输出内容 n ...

  8. 发布npm包到GitHub Packages

    发布Npm包到GitHub Packages Github集成了GitHub Packages功能,目前提供了Npm.Docker.Maven.NuGet.RubyGems的包管理工具,可以通过Git ...

  9. 200多个恶意NPM程序包针对Azure 开发人员,发动供应链攻击

     聚焦源代码安全,网罗国内外最新资讯! 编译:代码卫士 专栏·供应链安全 数字化时代,软件无处不在.软件如同社会中的"虚拟人",已经成为支撑社会正常运转的最基本元素之一,软件的安全 ...

最新文章

  1. leveldb源码分析:数据插入续(跳表)
  2. MPB:中科院生态环境中心邓晔组-环境样本中原核生物的总量测定
  3. python代码根据当前时间获取下一周的日期
  4. 小F的2013应届校招历程小结
  5. (原创)speex与wav格式音频文件的互相转换(二)
  6. Windows 记事本的 ANSI、Unicode、UTF-8 这三种编码模式有什么区别?
  7. 台式电脑怎么找不到计算机在哪,台式机没有蓝牙怎么办
  8. html5自动旋转图片,HTML5画布旋转图片
  9. rust vs java_为什么我从Java切换到Rust
  10. Android 横屏启动activity,点击屏幕的单击、双击和长按事件
  11. python的numpy入门简介
  12. 模拟电子中放大电路的基本分析方法
  13. 怎样去提高效率,五步优化法
  14. 解决wampserver server offline
  15. Qt Creator下载安装以及Qt和Qt Creator的区别
  16. 四面体 matlab,matlab生成四面体单元
  17. devise校验旧密码
  18. Caused by: java.lang.ClassNotFoundException: org.springframework.scheduling.quartz.CronTriggerBean
  19. Windows 和 Linux 系统查询 IP 地址命令
  20. 如何做好服务器的防御工作

热门文章

  1. openssl 测试加密卡_OpenSSL自带的aes_128_ecb加密函数——密文长度测试
  2. java入门从哪下手_java新手0基础如何最快速的入门
  3. Django,ajax实现表格增删查改,Django内置分页功能。
  4. 三元表达式,列表解析和生成器表达式
  5. python之正则(一)
  6. 【翻译】在Ext JS和Sencha Touch中创建自己定义布局
  7. OpenGL编程低级错误范例手册
  8. android开发相关资料整理【2011-11-10】
  9. Oracle新手笔记(2) 关于Oracle 9i或9i以上版本客户端连接Oracle 8i及8i版本以下服务器端中文字符乱码的解决办法...
  10. Angular自学笔记(?)DI提供者