代码之家  ›  专栏  ›  技术社区  ›  Sibiraj Marko AvlijaÅ¡

防止直接运行时出现“npm publish”

  •  0
  • Sibiraj Marko AvlijaÅ¡  · 技术社区  · 6 年前

    我不确定是否有可能。

    在下列情况下是否可以阻止发布 npm publish 直接运行并使其只能通过脚本访问。

    在下列情况下必须拒绝用户 NPM发布 直接执行。即用户必须能够通过任何脚本或 npm run <script>

    有没有办法告诉NPM只发布 <folder>/ 或者在出版时寻找一个tarball。

    3 回复  |  直到 6 年前
        1
  •  2
  •   zero298    6 年前

    将包标记为 private :

    如果在package.json中设置了“private”:true,那么npm将拒绝 发布它。

    这是一种防止意外发布私人 存储库。如果要确保给定的包 已发布到特定注册表(例如,内部 注册表),然后使用下面描述的publishconfig字典 在发布时重写注册表配置参数。

    {
      "name": "some",
      "version": "1.0.0",
      "private": true
    }
    

    如果您试图在发布前强制执行某些操作,请利用 prepublish prepublishOnly npm-script .

        2
  •  1
  •   Parameshwar Ande    6 年前

    是的,我们可以通过在package.json中设置private:true来限制NPM以防止意外发布。

    您也可以有用于发布的脚本 在你的包里.json

    {
         "scripts": {
              "publish:mypackages": "npm publish folder1/file1.tgz --registry http://custom-registry..."
         }
    }
    

    现在在cmd:npm run publish:mypackages中

    它将给定的tarball发布到您给定的注册表中。

        3
  •  1
  •   Sibiraj Marko AvlijaÅ¡    6 年前

    如果我将它标记为私有,我将无法发布。我的主要目的是防止意外出版。

    新产品管理团队给出了一个简单的解决方法,这是非常糟糕的。

    包.json

    {
      "prepublishOnly": "node prepublish.js",
      "release": "RELEASE_MODE=true npm publish"
    }
    

    预出版.js

    const RELEASE_MODE = !!(process.env.RELEASE_MODE)
    
    if (!RELEASE_MODE) {
        console.log('Run `npm run release` to publish the package')
        process.exit(1) //which terminates the publish process
    }