美文网首页
NPM包(模块)发布、更新、撤销发

NPM包(模块)发布、更新、撤销发

作者: Leson17 | 来源:发表于2020-11-04 15:04 被阅读0次

    在开始之前,先去注册一个NPM账号,如果没有的话

    ◈ 发布NPM公开包

    ♢ 创建项目

    1. 建项目文件夹
      先建一个工程文件夹或者拉取远程git上的已有项目

      mkdir my-test-project
      复制代码
      
    2. 初始化git
      进入该文件夹,先初始化git(如果还没有的话),用于版本控制。在github(也可以其他)上新建一个与项目同名的远程仓库,并添加README.md文件,拷贝仓库地址,如:

      // 拷贝github上的仓库地址
      git@github.com:username/my-test-project.git
      
      git init
      git remote add origin git@github.com:usename//my-test-project.git
      git push -u origin master
      复制代码
      

      这样就把本地仓库和远程仓库关联起来了

    3. 初始化npm
      在项目根目录下即my-test-project目录下执行,npm init,然后根据提示填写相关信息,有些可以略过后续修改。 要注意的是name字段,有几个点要提醒:

      • 这个是唯一的,不能和npm上所有已有的包重名,否则在publish的时候回会提示权限错误

        npm ERR! You do not have permission to publish "my-test-project". 
        Are you logged in as the correct user? : my-test-project
        复制代码
        
      • 另外命名也有规范,不能出现下划线、大写字母、空格等字符,可以有连字符(中划线)

      • 先创建index.js文件,作为测试,在里面写几行简单代码,并export一个默认变量

    ♢ 发布

    1. 先登录npm用户,执行

      npm adduser // or npm login
      Username: npm-user-name
      Password:
      Email: your-email
      复制代码
      

      根据提示输入正确的npm用户名、密码、邮箱,添加完后会默认登录

    2. 执行

      npm publish
      复制代码
      

      如果没什么问题,应该就发布成功了。可以去npm搜索发布的包: my-test-project,或者去自己的npm账号下查看package

    ♢ 关于测试

    1. publish前测试
      在npm init 完成之后,就可以作为一个依赖包供其他模块引用。根据上面的例子,把my-test-project文件夹放入另外的测试工程node_modules文件夹下面,这样就可以跟引入其他模块一样,引入之前在index.js里面export的测试变量,如

      // my-test-project 下的index.js
      const a = 'this is a test'
      export default a // or module.exports = a
      
      // 引用
      import a from 'my-test-project' // or const a = require('my-test-project')
      复制代码
      

      建议先测试完,没有问题再publish

    2. publish后测试是否有问题
      publish后就更好办了,直接像安装其他模块一样通过npm i 命令安装,然后引用

    ◈ 更新已发布的包

    更新包和发布包的命令是一样的,更新包只需修改package.json里面的version字段,也可以使用npm 自带的版本控制命令修改版本号,更新的步骤为:

    1. 修改版本号
    2. npm publish

    ♢ npm version

    npm 提供官方提供了npm version来进行版本控制,其效果跟手动修改package.json里面的version字段是一样的,好处在于,可以在构建过程中用npm version命令自动修改,而且具有语义化即Semantic versioning.

    npm version [<newversion> | major | minor | patch | premajor | preminor | 
    prepatch | prerelease | from-git]
    复制代码
    

    其语义为:

    major:主版本号(大版本)
    minor:次版本号(小更新)
    patch:补丁号(补丁)
    premajor:预备主版本
    preminor: 预备次版本
    prepatch:预备补丁版本
    prerelease:预发布版本
    复制代码
    

    如初始版本为 1.0.0,执行相关类型命令后,对应的语意为:

    npm version patch  // 1.0.1 表示小的bug修复
    npm version minor // 1.1.0 表示新增一些小功能
    npm version mmajor // 2.0.0 表示大的版本或大升级
    npm version preminor // 1.1.0-0 后面多了个0,表示预发布
    复制代码
    

    可以在当前模块的package.json里面看到相应的版本变化

    ◈ 撤销发布

    由于撤销发布会让把要撤销的包作为依赖的包不能正常工作,所以npm官方对包的撤销是有限制的:

    1. 不允许撤销发布已经超过24小时的包(unpublish is only allowed with versions published in the last 24 hours
    2. 如果在24小时内确实要撤销,需要加--force参数
    3. 即使撤销了发布的包,再次发布的时候也不能与之前被撤销的包的名称/版本其中之一相同,因为这两者构成的唯一性已经被占用,官方并没有随着撤销而删除

    ♢ npm unpublish

    撤销发布的命令为 npm unpublish

    npm unpublish my-test-project
    // 报错
    npm ERR! Refusing to delete entire project.
    npm ERR! Run with --force to do this.
    npm ERR! npm unpublish [<@scope>/]<pkg>[@<version>]
    
    // 加 --force参数重新撤销发布
    npm unpublish my-test-project --force
    npm WARN using --force I sure hope you know what you are doing.
    - my-test-project
    复制代码
    

    ♢ npm deprecate

    npm unpublish的推荐替代命令:

    npm deprecate <pkg>[@<version>] <message>
    复制代码
    

    这个命令,并不会在npm上里撤销已有的包,但会在任何人尝试安装这个包的时候得到deprecated的警告,例如:

    npm deprecate my-test-project 'this package is no longer maintained'
    复制代码
    

    参考:

    相关文章

      网友评论

          本文标题:NPM包(模块)发布、更新、撤销发

          本文链接:https://www.haomeiwen.com/subject/ecegvktx.html