千家信息网

node文件如何写成npm包并发布出去

发表于:2025-11-12 作者:千家信息网编辑
千家信息网最后更新 2025年11月12日,这篇文章主要介绍了node文件如何写成npm包并发布出去,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。把node文件拷贝写成npm包,
千家信息网最后更新 2025年11月12日node文件如何写成npm包并发布出去

这篇文章主要介绍了node文件如何写成npm包并发布出去,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

把node文件拷贝写成npm包,并发布

npm插件发布

发布npm其实是一件很简单的事情,只是因为长时间不发布会忘记,又得上网去查一下,所以就写篇文章记录一下。

新建文件目录

  • 新建目录,取名任意

  • 运行命令生成package.json

npm init --yes

安装依赖

如果项目中还需要其他依赖,可以向正常开发时一样通过npm install xxx安装 不过这里有一点需要注意的是,-S--save--save-dev的区别,因为通常在开发项目的时候这三个是没有什么本质区别的,但是在开发npm包的还是有区别的

  • -S--save下载的插件会被写入dependencies,并且我们在安装自定义的插件时,会一块被下载

  • --save-dev下载的插件会被写入devDendencies,这个只是在开发的时候使用,并不会随着自定义插件一块被安装

完善package.json

有几个重要的信息是一定要填写的

  • name 别人安装这个插件需要通过 npm install xxx,来安装这个xxx对应的是namevalue

  • version 插件的版本,每次重新发布都需要重新这个版本后,不然发布会失败

  • main 入口文件

其他可以看需要填写

{"name": "node-fs-copy", //发布的包名,默认是上级文件夹名。不得与现在npm中的包名重复。包名不能有大写字母/空格/下滑线!  "version": "1.0.0",//你这个包的版本,默认是1.0.0。对于npm包的版本号有着一系列的规则,模块的版本号采用X.Y.Z的格式,具体体现为:  1、修复bug,小改动,增加z。  2、增加新特性,可向后兼容,增加y  3、有很大的改动,无法向下兼容,增加x  "description": "",  "main": "index.js",//入口文件,默认是Index.js,可以修改成自己的文件,这个很重要,当你在实际项目使用的时候,let a = require("包名"),它就去会去找对应的文件路径哦。  "scripts": {                  // 快捷命令,在package.json同目录下输入命令 npm run 键 就会执行 相对应的命令    "bulid": "npx webpack --config myConfig.js"  //例如 输入 npm run bulid 就会执行npx webpack --config myConfig.js的命令 。  },  "keywords": [ // npm搜索的关键字     "node",     "fs",     "copy"  ],  "publishConfig": {    "registry": "" // 发布的npm地址  },  "repository": {      "type": "git",      "url": "git+https://github.com/xxxx" // 代码的git地址  },  "author": "zxw",  "license": "ISC",//这个直接回车,开源文件协议吧,也可以是MIT,看需要吧。  "dependencies": {             // 生产环境所依赖的包    "jquery": "^3.4.1",    "sea": "^1.0.2"  },  "devDependencies": {          // 开发环境所依赖的包    "webpack": "^4.41.6"  }}

确定入口文件为index.js之后,并写入代码,注意引入和导出都需要通过node的方式

  • index.js

const { exists, copyDir} = require('./lib/copy')const fsCopy = (sourcePath, deptPath)=> {  exists(sourcePath,deptPath, copyDir)}module.exports = {  fsCopy}
  • /lib/copy.js

const fs = require('fs')/** * 复制一个文件夹下的文件到另一个文件夹 * @param src 源文件夹,即需要写出的文件 * @param dst 目标文件夹,需要写入的文件 */const copyDir = function (src, dst) {  // 读取目录中的所有文件/目录  fs.readdir(src, function (err, paths) {    if (err) {      throw err    }    paths.forEach(function (path) {      const _src = src + '/' + path      const _dst = dst + '/' + path      let readable;      let writable      fs.stat(_src, function (err, st) {        if (err) {          throw err        }        // 判断是否为文件        if (st.isFile()) {          // 创建读取流          readable = fs.createReadStream(_src)          // 创建写入流          writable = fs.createWriteStream(_dst)          // 通过管道来传输流          readable.pipe(writable)        }        // 如果是目录则递归调用自身        else if (st.isDirectory()) {          exists(_src, _dst, copyDir)        }      })    })  })}/** 判断当前目标文件是否存在* 如若不存在需要先进行创建* */const exists = function (src, dst, callback) {  // 如果路径存在,则返回 true,否则返回 false。  if (fs.existsSync(dst)) {    callback(src, dst)  } else {    fs.mkdir(dst, function () {      callback(src, dst)    })  }}module.exports = {  exists,  copyDir}

测试

这一块我只是进行了比较简单的测试,后续我会专门补一章关于插件测试的文章

发布

  • 注册npm账号,通常npm可以通过关联gitlab直接登录

  • 确定你当前的镜像指向npm镜像而不是淘宝镜像,如果不确定可以直接执行

npm config set registry https://registry.npmjs.org/
  • 运行添加用户命令,依次输入用户,密码,邮箱。

npm addUser

  • 确保当前npm已经在浏览器登录情况下执行发布命令

npm publish

如图就是发布成功了

发布报错

如果发布遇到403报错,很有可能是你的包名即package.json里面的name字段与npm已经有的插件名重复了,需要修改一下再重新发布

修改过名字依然报错, You cannot publish over the previously published versions: xxx,说明这个版本已经在npm存在,需要修改版本号

迭代

后续内容如果有变动,每次重新发布的时候,都需要手动的更改package.json/version的版本号,然后在执行发布的命令

使用示例

安装

npm install node-fs-copy

在node代码中,本地拷贝测试

const { fsCopy } = require('node-fs-copy')// 把内容从本地D盘的test/test目录,拷贝到test/test1目录fsCopy('d:/test/test', 'd:/test/test1')

服务器代码拷贝

本地是没有办法直接拷贝服务器代码的,如果需要拷贝服务器代码,需要满足一个条件

  • node服务端代码,与需要拷贝的文件在一个服务器上

比如作者的的服务器上的文件地址为/data/code-generator,node服务也部署在同一服务器的另一个目录内

//在服务器上运行,表示把服务器的/data/code-generator文件内的内容,拷贝到当前项目的./temporary/test内fsCopy('/data/code-generator', './temporary/test')

完成拷贝后,可以使用打包插件把该内容压缩成zip包,输出到前端,然后删除该临时文件./temporary/test,再删除zip包

附上常用命令

npm init --yes(初始化配置)npm i (会根据package.json里面的键dependencies,devDependencies来安装相对应的包)npm i 包(默认安装一个最新的包,这个包在node_modules文件夹里面,并且会更新在你的package.json文件)npm i 包@3.0.0(安装一个指定版本的包,会更新在你的package.json文件)npm i 包 --save-dev(安装一个开发环境所需要的包,会更新在你的package.json文件)npm uninstall 包(卸载一个包,会更新在你的package.json文件)npm update 包(更新此包版本为最新版本,会更新在你的package.json文件)npm run 脚本键(会根据package.json里面的"scripts"里面的脚本键自动执行相对于的值)npm publish  (根据package.json的name发布一个包)npm unpublish 包名 --force(卸载npm网站上自己上传的包)

感谢你能够认真阅读完这篇文章,希望小编分享的"node文件如何写成npm包并发布出去"这篇文章对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,更多相关知识等着你来学习!

文件 版本 插件 服务 命令 拷贝 目录 服务器 代码 开发 更新 文件夹 篇文章 内容 时候 测试 入口 只是 地址 环境 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 珠海服务器维修价格 数据库性能测试仓是什么概念 数据库表格中增加数据库 网络技术蠕虫 如何免费开启手机基岩版服务器 批量下载专利用什么数据库 临沂平台软件开发公司 软件开发中瀑布模型 考研网络技术学校排名 男生学计算机网络技术有用吗 织梦网站数据库怎么恢复 数据库提权sql注入漏洞 网络安全工作听取各职能部门汇报 网络安全的日常工作怎么样 游戏嵌入式软件开发 我国网络安全法律体系特点 浙江省委网络安全与信息化 十四五时期的网络安全治理 服务器断电重启进入紧急模式 上海交友软件开发需要多少钱 网络安全漫画二年级 郑州中航软件开发有 为什么激动火柴人连接不了服务器 番茄时钟数据库 软件开发晋升述职报告ppt 万方数据库知网空间 我的世界服务器村民 网络技术的培训讲义 网络安全法规定经过处理 删除数据库中前3个工作日的数据
0