npm 为一个包创建两个版本

svmlkihl  于 12个月前  发布在  其他
关注(0)|答案(2)|浏览(160)

是否可以提供同一个软件包的两个版本npm?
我有一个git repository:

MyRepo
|- library
|- FolderToHide
|- package.json
|- .npmignore

字符串
文件package.json包含:

{
   "name": "myRepo",
   "repository": {
     "type": "git",
     "url": "https://somewhere"
   },
   ...
}


如何配置我的软件包以创建一个带有FolderToHide的版本和另一个不带FolderToHide的版本?
我想要这样的东西:

MyRepo2
|- node_modules
  |- myRepo
    |- library

MyRepo3
|- node_modules
  |- myRepo
    |- library
    |- FolderToHide


MyRepo3可以用作调试仓库,也许可以为包创建调试版本?

eagi6jfj

eagi6jfj1#

如果你希望它是一个npm包,例如my-package(而不是两个单独的包my-packagemy-package-with-hidden-folder),你可以使用dist-tags
1.当你对你想要发布的软件包做了修改后,将FolderToHide添加到你的.npmignore中。
1.将-limited添加到package.json中的软件包版本(因此它看起来像2.1.0-limited)并运行npm publish --tag limited(您可以使用任何您想要的名称替换limited)。这将发布带有limited标记的不带FolderToHide的软件包版本。
1.从.npmignore中删除FolderToHide
1.将package.json中的-limited更改为-full并运行npm publish --tag full(同样,full可以是您希望的任何名称)。这将发布包含FolderToHide的新版本软件包。
然后,当你想在另一个项目中安装你的软件包时,你可以运行npm install my-package@limitednpm install my-package@full
或者,你可以决定将其中一个版本作为默认选项。在这种情况下,你应该省略它的dist-tag。所以你只需要运行npm publish而不是npm publish --tag full。这将(隐式地)将标签latest分配给发布的版本。当你安装包而不指定标签(npm install my-package)时,npm将使用带有latest标签的包。

irtuqstp

irtuqstp2#

如果我理解正确的话,你想发布两个不同的包到npm(或类似的),但不想要两个“仓库”?
好的,首先,在包的根目录下创建一个node-script,例如,你可以称之为“js.js”。
在该脚本中,您可以放入如下内容(伪代码):

const fs = require('fs');
const { spawn } = require('node:child_process');

let packageJSON = fs.readFileSync("path to package.json");

// For the first package,without the hiddenfolder:
packageJSON.files = ["library", "package.json", "any  other file you want to include in the package"];

fs.writeFileSync("path to the project package.json", JSON.stringify(packageJSON, null, 2), 'utf-8');

// then run publish (version first if pref)

const publish = spawn('npm', ['publish']);

publish.stdout.on('data', (data) => {
  console.log(`stdout: ${data}`);
});

publish.stderr.on('data', (data) => {
  console.error(`stderr: ${data}`);
});

// For the second package,with the hiddenfolder:
packageJSON = fs.readFileSync("path to package.json");
packageJSON.files = ["library", "hiddenFolder","package.json", "any  other file you want to include in the package"];

fs.writeFileSync("path to the project package.json", JSON.stringify(packageJSON, null, 2), 'utf-8');

// then run publish (version first if pref)

const publish = spawn('npm', ['publish']);

publish.stdout.on('data', (data) => {
  console.log(`stdout: ${data}`);
});

publish.stderr.on('data', (data) => {
  console.error(`stderr: ${data}`);
});

字符串
然后在package.json中添加一个script标签:

{
  …
  "scripts": {
    …
    "release": "node ./publish.js",
    …
  }
  …
}


因此,每次要发布时,只需运行npm run releasenpm pack将只打包files数组中的内容。单击此处查看有关files的完整文档

注意这只是未经证实的伪代码,YMMV。

  • 另一个选项是复制到临时目录(被.npmignore.gitignore隐藏,包括包含您想要释放的files的修改后的package.json),并从该目录运行npm publish

相关问题