• 技术文章 >web前端 >js教程

    node文件怎么写成npm包并发布出去?

    青灯夜游青灯夜游2021-09-15 10:13:31转载87
    node文件怎么写成npm包?下面本篇文章给大家介绍一下把node文件拷贝写成npm包并发布出去的方法,希望对大家有所帮助!

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

    npm插件发布

    发布npm其实是一件很简单的事情,只是因为长时间不发布会忘记,又得上网去查一下,所以就写篇文章记录一下。【推荐学习:《nodejs 教程》】

    新建文件目录

    npm init --yes

    安装依赖

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

    完善package.json

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

    其他可以看需要填写

    {
    "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的方式

    const { exists, copyDir} = require('./lib/copy')
    
    const fsCopy = (sourcePath, deptPath)=> {
      exists(sourcePath,deptPath, copyDir)
    }
    
    module.exports = {
      fsCopy
    }
    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 config set registry https://registry.npmjs.org/
    npm addUser

    1.png

    npm publish

    2.png

    如图就是发布成功了

    发布报错

    如果发布遇到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')

    服务器代码拷贝

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

    比如作者的的服务器上的文件地址为/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包并发布出去?的详细内容,更多请关注php中文网其它相关文章!

    声明:本文转载于:掘金社区,如有侵犯,请联系admin@php.cn删除
    专题推荐:node npm包
    上一篇:教你使用HTML、CSS和JS创建响应式可过滤的游戏(附代码) 下一篇:一招教你使用HTML/CSS和Three.js的喷火龙小游戏(代码分享)
    线上培训班

    相关文章推荐

    • 深入了解Node.js中的异步编程,分享四种解决方案• 深入了解Node.js中的四大流,解决“背压”问题• 一文快速了解Nodejs中的模块系统• 一招教你使用Node.js中iis部署运行node(附代码)• 浅析VSCode中调试Node.js的方法

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网