首页 文章

发布除NPM之外的Node.js包

提问于
浏览
1

我已经使用Node.js几年了,但仅限于小型自包含项目 .

我最近一直在研究如何创建包并将其包含('require')到更大的项目中 . 根据我的理解,这些包都是本地的(项目的一部分),或者是在NPM网站上发布/拉出的 .

但是如果我创建一个自包含的包并且不想将它发布到NPM,因为它包含专有代码,我无法看到我如何正确地创建,管理和发布(到内部服务器)这样的包 .

我在过去的十年中使用过Java和Maven,这个堆栈对我来说非常好用 . 您将模块/库包装到JAR文件中,然后将它们发布到本地服务器(即:Artifactory,Nexus或其他) . 当DEV“需要”依赖/包时,它将搜索我们的本地存储库管理器,如果在该级别找不到,则查看Maven中央存储库(在Internet上) . 工作得非常好 .

我们如何使用Node.js包NPM进行相同的操作?我搜索过,但发现那里的信息非常有限 .

任何教程,文章或任何东西的链接将不胜感激 .


UPDATE: 2018.01.29 14:45

我发现这些文献似乎表明你可以运行自己的NPM注册表!! Can I Run My Own Private Registery?

另外,我在Dependencies section of 'package.json'发现了以下有趣内容,其中显示:

{ "dependencies" :
  { "foo" : "1.0.0 - 2.9999.9999"
  , "bar" : ">=1.0.2 <2.1.2"
  , "baz" : ">1.0.2 <=2.3.4"
  , "boo" : "2.0.1"
  , "qux" : "<1.0.0 || >=2.3.1 <2.4.5 || >=2.5.2 <3.0.0"
  , "asd" : "http://asdf.com/asdf.tar.gz"
  , "til" : "~1.2"
  , "elf" : "~1.2.3"
  , "two" : "2.x"
  , "thr" : "3.3.x"
  , "lat" : "latest"
  , "dyl" : "file:../dyl"
  }
}

其中以下是有趣的 .

"asd" : "http://asdf.com/asdf.tar.gz"

可能表示您可以从自己的服务器中提取包 . 我一定会试一试并报告 .


UPDATE: 2018.01.30 16:17

好的,虽然我非常有信心您可以实际配置NPM以选择性地在本地或您自己的注册表(服务器)发布,但我对以下内容非常满意:

首先,创建单独的NPM包(即: npm init )并实现它 .

其次,使用 npm version 1.2.3 设置您的版本 . 在添加和维护代码时,您将使用 npm version majornpm version minornpm version patch 之一调整版本 .

第三,准备发布时,从你的NPM包中调用 npm pack . 这将创建一个压缩的tarball(tgz)文件(即: foo-bar-1.2.3.tgz ) .

第四,您现在可以独立管理此类文件,例如将它们复制到您自己的服务器,甚至是诸如Artifactory之类的存储库管理器 .

第五,当你需要你的私人包时,如果你手动下载了包,或者 npm install --save https://repo-server.com/some/path/foo-bar ,只需输入 npm install --save foo-bar-1.2.3.4.tgz . 下载哪个版本取决于您使用的环境(开发,测试,阶段或产品) . 或者您甚至可以在URL中强制使用版本号(您的存储库服务器应该支持各种API调用) .

通过安装私有包,NPM应自动下载并安装所有依赖项 . 我说“应该”因为我没有证实这一点 .

2 回答

  • 1

    也许您可以做的是在GitHub上发布它,在 package.json 中你可以直接从存储库中调用这样的东西:

    "dependencies": {
      "mongoose-cipher": "git+ssh://git@github.com:estrada9166/mongoose-
      cipher.git"
    }
    

    要么

    "dependencies": {
      "mongoose-cipher": "git+https://git@github.com:estrada9166/mongoose-
      cipher.git"
    }
    

    您也可以指定发行版,以防您的存储库有一个,例如:

    "dependencies": {
      "mongoose-cipher": "git+ssh://git@github.com:estrada9166/mongoose-
      cipher.git#v0.0.7"
    }
    

    你可以用你的包创建一个私人存储库,这样就安全了!

  • 3

    Private repository:

    如果您想要托管您的私有软件包,并将代理请求代理到 npmjs.org ,您可以使用以下任一方式:

    Nexus OSS 3.x具有成为通用存储库的优势(即支持npm,maven等) .

    Self-contained packages:

    正如您已经提到的那样 npm pack 生成tarball,它可以直接作为依赖项包含在其他包中 . 但您也可以使用bundledProperties package.json 创建包含所有依赖项的tarball . 这样,在解压缩tarball时就不需要调用 npm install . 使用此方法的唯一警告是,如果开发和 生产环境 计算机具有不同的体系结构,则本机模块可能不起作用 .

相关问题