我需要一堆devDependencies
才能运行测试套件并使用npm shrinkwrap
锁定生产依赖项。问题是当我运行npm install
时,只安装了生产依赖项,为了安装devDependencies
,我必须删除npm-shrinkwrap.json并再次运行它。
现在,如果shrinkwrap也包含devDependencies
,那么它们将在生产中安装,不需要它们。当然应该有一些命令行参数来强制只安装普通的依赖项?
答案 0 :(得分:48)
2016年9月:
正如其他人所提到的那样,从npm v3.10.8开始,我们需要付出巨大努力来增强收缩包装功能。
感谢this,只有在安装生产依赖项时才能锁定devDependencies
:
npm shrinkwrap --dev
npm install --only=prod
2013回答:
如NPM docs中所述:
由于
npm shrinkwrap
旨在锁定您的依赖项 生产用途,devDependencies
将不包括在内,除非您 运行npm shrinkwrap时显式设置--dev
标志。如果 排除已安装devDependencies
,然后npm将打印警告。 如果您希望默认情况下将它们与您的模块一起安装,请 考虑将它们添加到依赖项中。
基本上,或者您锁定所有deps,或仅锁定生产deps。
甚至不能运行npm install --dev
或npm install --force
都可以超越收缩包裹功能。
答案 1 :(得分:1)
最近在changelog
的npm客户端v3.3中添加了此功能您现在可以运行import java.util.*;
class C10E3
{
static Scanner console = new Scanner(System.in);
public static void main(String[] args)
{
//declaration phase
int[] array ={4, 23, 65, 34, 82, 37, 12, 17, 24, 36, 82, 51};
int[] arrayUpdated = new int[11];
int intToBeRemoved;
Remover remove = new Remover();
System.out.println("Which of these elements shalls be removed from thr array?");
for (intCounter = 0; intCounter < 12; intCounter++)
System.out.print(array[intCounter]);
System.out.print("\n");
intToBeRemoved = consoe.nextInt();
arrayUpdated = remove.removeItem(array, 12, intToBeRemoved);
System.out.print("Updated Array: ");
for (intCounter = 0; intCounter < 11; intCounter++)
System.out.print(array[intCounter]);
}
}
class Remover
{
private Vector vector = new Vector();
public int[] removeItem(int[] array, int intArrayLength, int intToRemove)
{
boolean boolIsRemoved;
int[] arrayToReturn = new int[intArrayLength - 1];
int intCounter;
for (intCounter = 0; intCounter < intArrayLength; intCounter++)
vector.addElement(array[intCounter]);
boolIsRemoved = vector.removeElement(intToRemove);
if (boolIsRemoved == true)
{
for (intCounter = 0; intCounter < intArrayLength - 1; intCounter++)
arrayToReturn[intCounter] = vector.elementAt(intCounter);
}
else
{
System.out.println("Element not present in array.");
for (intCounter = 0; intCounter < intArrayLength - 1; intCounter++)
arrayToReturn[intCounter] = array[intCounter];
}
return arrayToReturn;
}
}
来达到您想要的效果。
答案 2 :(得分:1)
编辑 2016/09/13
我已经测试了npm v3.10.8,此功能现在按预期工作。我们收缩了devDependencies,并且在部署时只能安装prod依赖项。
我认为值得一提的是,此功能应该很快就会按预期开始工作。根据这个github issue,很多人遇到了同样的问题,根据这个pull request,它将在下一个版本中(计划于2016-09-08)。
合并了拉取请求后,您所要做的就是:
npm i --only=prod
答案 3 :(得分:1)
至于npm 5(我已经尝试过5.5.1和5.6.0), - 生产( - only = prod )标志是有问题的。
当 package-lock.json 存在于文件夹中时,
npm shrinkwrap --production
只需将文件名更改为 npm-shrinkwrap.json 。
我如何设法解决这个问题就是运行:
npm prune --production
然后运行:
npm shrinkwrap --production
答案 4 :(得分:0)
这已在npm
3.10.8
中修复; npm install --production
不应在npm shrinkwrap --dev
创建的收缩包裹中安装开发人员:https://github.com/npm/npm/releases/tag/v3.10.8