假设我已经制作了一个名为 foo 的TDD工具,我想使用 foo v1 来帮助我开发 foo v2 。
但是当我npm install --save-dev foo@^1.0.0
时,npm说“拒绝安装foo作为自身的依赖”。
我到目前为止的解决方法(以及为什么它们不够好):
解决方法1:只需要使用相对要求直接使用相关脚本,例如require('../lib')
(这就是mocha does it的方式,到目前为止我一直在这样做。)
解决方法2:以不同的名称将模块的副本发布到npm,例如“foo-clone”。 (然后你可以将foo-clone安装为foo的devDependency。)
答案 0 :(得分:2)
以下是解决方法2 的更好替代方案。
让我们假设您只需要在开发的早期阶段就具有这种依赖性。因此,在发布第一个生产就绪版本之前,您将摆脱它,例如,采用mocha
解决方案(使用当前稳定版本进行自我测试)。
在这种情况下,您可以临时重命名您的包(即使用-dev
对其进行后缀),而不是发布重复的包。
为了保证不会发布此重命名的包,您还可以添加private
flag。
所以,你的dev package.json看起来像是:
{
"name": "mytdd-dev",
"version": "2.0.0-dev",
"private": true,
...
"devDependencies": {
"mytdd": "1.x.x",
...
},
...
}
然后,当你的软件包准备好第一个版本时,你将删除所有-dev
后缀,private
标志和开发人员对先前版本的依赖。
此解决方案的唯一问题是您无法将早期开发版本的TDD工具发布到npm(只要您依赖以前的版本)。
如果安装一个确切的克隆会起作用,那么在npm中会有什么危害,允许我安装[旧版本的] foo作为foo的devDependency
我认为这是针对循环依赖的安全预防措施。
如果你认为npm应该在devDependencies
为public void addProduct(int id, String name, String type, String brand, int quantity, int day1, int month1, int year1, int day2, int month2, int year2, String company, String name2, String address, int phone_no)
{
Formatter x = null;
try{
FileWriter f = new FileWriter("C:\\Users\\فاطمة\\Downloads\\products.txt", true);
x = new Formatter(f);
}
catch(Exception e)
{
//System.out.println("NO Database");
}
x.format("%d %s %s %s %d %d %d %d %d %d %d %s %s %s %d\n\n\n",id,name,type,brand,quantity,day1,month1,year1,day2,month2,year2,company,name2,address,phone_no);
x.close();
}
做例外,这对我来说是合理的,那么你应该将你的建议发布到npm
issues tracker。