2016-04-22 54 views
0

有没有一种方法来创建一个元包,package.json加盟发展NPM的依赖关系到单个元包

一)包含依赖关系,未用于构建这种 包的列表;

B)强制NPM安装这些DEPS,在这个非常 元包添加到项目,既为生产的发展?

问题是我的样板文件中有几十个包(prod和dev),我从一个项目复制到另一个项目。我想有一个私人包,一旦添加到项目的package.json告诉npm哪些其他prod和dev deps安装。我想改进使用样板的过程,因为当我改变它的样子时,我已经(实际上这是我的意愿,而不是执行)在这个样板的基础上构建的所有项目中进行这些更改,仍在发展中。

我已经成功地将我通常使用的所有代码添加到我的元包package.jsonproduction部分。然而,有两个问题的方法:

了很多不必要的包在安装时我建立的元包(我有,因为它包含了一些ES6助手/ 7建造它);

2.我仍然需要在每个新项目中复制/粘贴生产项目清单,以提供NPM信息,以及在生产服务器上安装的内容。

非npm解决方案也是受欢迎的。

回答

1

嗯,这似乎是很容易做到:

首先,需要分割的样板中使用的所有的包分成两组 - 运行应用所需的(production ),并且需要构建和调试(development)。

2.创建production元包(meta-prod)。 package.json内容:

... 
"dependencies": { 
    < Here we have the list of production dependencies.  > 
}, 
... 

如有必要编译它,并推送到git(即,github)。

3.创建development元包(meta-dev)。 package.json内容:

... 
"dependencies": { 
    < Here we have the list of development dependencies.  > 
    < Please note, that this is in the 'dependencies' section, > 
    < not the 'devDependencies'.        > 
}, 
... 

把它推到git。

4.从样板的package.json删除所有的依赖,取而代之的是:

... 
"dependencies": { 
    "meta-prod": "git+https://github.com/your_account/meta-prod" 
}, 
"devDependencies": { 
    "meta-dev": "git+https://github.com/your_account/meta-dev" 
}, 
... 

这就是它!当您执行npm install时将会安装相关性,npm将适当考虑作为生产和开发。现在,您可以使用更小的package.json样板,并从单点更新您的开发人员列表。

唯一的缺点是,npm当你使用包从git,所以更新你必须从node_modules并重新运行npm install删除元包目录内的应用程序包不赶的版本变化。要解决这个问题,你可以将你的软件包发布到npmjs.com(如果你是付费npm客户,最好将它发布为私有软件包),并且每次更新时都要更改元软件包版本。

这里是样板和元套餐例如:

+0

,你才能使用依赖的依赖?每个包都有自己的依赖副本(因此不允许使用递归安装的依赖关系),NPM的意义何在? –

+0

由于版本3'npm'确实打包了[flattening](https://docs.npmjs.com/how-npm-works/npm3)并将它们全部安装到了上层'node_modules'目录中,直到子依赖关系不相互冲突。所以,是的,可以使用这种方法来使用子依赖关系。当然,缺点是这是让他们进入你的项目的隐含方式。 –