将库包合并到单个节点包

时间:2018-05-03 08:27:11

标签: javascript reactjs npm

我在几个项目中一次又一次使用少量库,我想在项目中强制执行特定版本。

项目1

{
  "name": "project_1",
  "version": "0.1.0",
  "dependencies": {
    "react": "^16.3.2",
    "react-dom": "^16.3.2",
    "react-router": "^4.2.0",
    "react-router-dom": "^4.2.2"
  }
}

项目2

{
  "name": "project_1",
  "version": "0.1.0",
  "dependencies": {
    "react": "^16.3.2",
    "react-dom": "^16.3.2",
    "react-router": "^4.2.0",
    "react-router-dom": "^4.2.2"
  }
}

对于任何项目,我都希望将reactreact-domreact-routerreact-route-dom之上的所有包放入单个节点包(all-libs)中如下。通过这种方式,我可以冻结所有项目中的版本。

任何项目

{
  "name": "project_1",
  "version": "0.1.0",
  "dependencies": {
    "all-libs": "0.0.1"
  }
}

采用这种方法的原因:

  1. 集中版本升级以避免版本兼容性问题。
  2. 我的问题是如何创建此包(all-libs)?

2 个答案:

答案 0 :(得分:4)

您可以托管一个自己的npm包,它将这些包作为依赖项。您可以设置一个可以托管您的软件包的自己的nexus服务器,也可以将它放在npmjs上。

将此行添加到package.json:

"name": "all-libs",
"version": "0.0.1",
"description": "My Libs for every project",
"author": "Me",
"license": "MIT",
"engines": {
    "node": ">=8.9.3"
},
"publishConfig": {
    "registry": "http://myRegistry.com"
},
"devDependencies": {},
"dependencies": {
    "react": "^16.3.2",
    "react-dom": "^16.3.2",
    "react-router": "^4.2.0",
    "react-router-dom": "^4.2.2"
}

然后你可以通过NPM发布它:npm publish

有关更多信息,请参阅有关发布包的文档:https://docs.npmjs.com/cli/publish

答案 1 :(得分:1)

如果你想在一个包中包含这些包,你需要以某种方式在这个包中公开这些库:

import { React, BrowserHistory, ReactDOM } from 'all-libs';

但我想如果真的有意义的话。请注意,所有成熟的库(例如create-react-appnextjs)都要求您自己安装特定版本。