edp
edp copied to clipboard
edp unimport 支持
目前想移除一个已经 import
进来的包,只能手工做。
希望有个移除包的功能,类似 bower/npm
的 uninstall
。
PS: 不用 remove
或 uninstall
,是为了避免与 edp install
的反向操作产生歧义。
结合 ISSUE #332 我简单整理了以下 unimport 的流程,不知道是否合理
unimport 流程:
1.从 module.conf 中找到包的信息
2.读这个包的 package.json 找到所有依赖
3.对每个依赖重复2-3过程,知道把所有依赖遍历完
4.把所有依赖合并成一个数组,合并时去重,数组中每一项是 {packageName}
,一个包在数组中只出现一次
5.从 moudule.conf 中找到其他包的信息,依次执行2-4,并最终合并成一个数组
6.把4中的数组除掉,在5中的部分包,构成最终要 unimport 掉的包
7.删除掉这些包并更新 module.conf
[注1] edp不支持同一包的多个不同版本共存,所以 unimport 时不用考虑 version
在 #332 中提到
import 或 update 过程不应该把未指定的包(如被依赖的包)加入到 package.json 中,比如我 edp import er,你不能在 package.json 的 dep 中加上 eoo 这一项
但现在的版本中并不是这样
当我们引入一个包时会将他的依赖全部添加到package.json和module.conf的dep中
比如a->b,c,d
在package.json中
"dependencies": { "a": "xxx", "b": "xxx", "c": "xxx" }
在module.conf中
"packages": [ {"name": "a", ....}, {"name": "b", ....}, {"name": "c", ....} ]
这样在我们 unimport
a
时没有办法知道 b
和 c
是否被项目依赖
由于module.conf
中有所有的包,且结构是打平的,所以按你上面的玩法最后第6步出来的数组应该是空的了
对,所以针对现在这种结构是没有办法处理要unimport的包的依赖包的,因为没有办法确定他依赖的包是否只有他自己依赖,所以需要更明确的依赖关系的描述才能做到unimport
所以我们整个方式要改,合理的是package.json
中只包含开发者实际要的,module.conf
中包含全部的,这样两者的差就是那些纯依赖的包
那先做 #332 吧,@otakustay 灰大有空做不,或者 @beenlee 接手?
年前我估计没戏
那我按 #332 的思路做一下,不过我技术比较渣,大牛们多多指点
- 不要从module.conf中找要删除的包,直接从package.json中找
- 如果package.json中找不到,看看是哪些package.json中声明的dependencies依赖了它,直接做提示,不删除。
- 如果package.json的dependencies中有它,但是其他dependencies也依赖了它,也不做删除。
我理解,这次的升级,应该是对edp-package一次全面的梳理。所以以前的一些包袱,可以抛弃。
意思就是,可以让使用者重新手工编辑一下package.json里的dependencies