ecomfe / spec

This repository contains the specifications.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

package 规范 edp 字段 dependencies 规则讨论

firede opened this issue · comments

之前在 edp-packagecommit 中( ecomfe/edp-package@ee3092a )对 edp 字段 dependencies 规则的讨论还没结论,我整理一下在 issue 里继续。


方案 1

前端 package 查找规则

  1. 先找 edp.dependencies
  2. 若不存在,找根节点 dependencies
  3. 若不存在,返回 {}

devDependencies 的逻辑也类似。

优点:无后端依赖的 package 更符合 commonjs 规范。
缺点:使用了后端依赖、开发依赖时,需要在 edp 下写空字段消除歧义。

示例

// 现有前端 package(未扩展)
{
  "dependencies": {
    "saber-dom": "0.3.0"  // 前端 package
  },
  "devDependencies": {
    "saber-router": "0.2.0"  // 前端 package
  }
}

// 纯前端 package(有扩展)
{
  "dependencies": {
    "saber-dom": "0.3.0"  // 前端 package
  },
  "devDependencies": {
    "saber-router": "0.2.0"  // 前端 package
  },
  "edp": {
    "browsers": []
  }
}

// 只有后端依赖的 package
{
  "dependencies": {
    "edp-provider-rider": "0.3.1"  // 后端 package
  },
  "devDependencies": {
    "phantomjs": "1.0.0"  // 后端 package
  }
  "edp": {
    "dependencies": {},  // 添加空字段消除歧义
    "devDependencies": {},  // 添加空字段消除歧义
    "browsers": []
  }
}

// 同时有前后端依赖的 package
{
  "dependencies": {
    "saber-dom": "0.3.0"  // 前端 package
  },
  "devDependencies": {
    "phantomjs": "1.0.0"  // 后端 package
  }
  "edp": {
    "devDependencies": {},  // 添加空字段消除歧义
    "browsers": []
  }
}

方案 2

前端 package 查找规则

  1. 若存在 edp 字段,以 edppkgRoot,否则以根节点为 pkgRoot
  2. pkgRoot.dependencies
  3. 若不存在则返回 {}

devDependencies 的逻辑也类似。

优点:以是否存在 edp 字段为依据,依赖于开发依赖规则统一。
缺点:当使用了类似 edp.browsers 的扩展配置时,依赖信息必须写在 edp 下。

示例

// 现有前端 package(未扩展)
{
  "dependencies": {
    "saber-dom": "0.3.0"  // 前端 package
  },
  "devDependencies": {
    "saber-router": "0.2.0"  // 前端 package
  }
}

// 纯前端 package(有扩展)
{
  "edp": {
    "browsers": [],  // 存在扩展字段时,前端依赖需要配置在 edp 字段下
    "dependencies": {
      "saber-dom": "0.3.0"  // 前端 package
    },
    "devDependencies": {
      "saber-router": "0.2.0"  // 前端 package
    }
  }
}

// 只有后端依赖的 package
{
  "dependencies": {
    "edp-provider-rider": "0.3.1"  // 后端 package
  },
  "devDependencies": {
    "phantomjs": "1.0.0"  // 后端 package
  }
  "edp": {
    "browsers": []
  }
}

// 同时有前后端依赖的 package
{
  "devDependencies": {
    "phantomjs": "1.0.0"  // 后端 package
  }
  "edp": {
    "dependencies": {
      "saber-dom": "0.3.0"  // 前端 package
    },
    "browsers": []
  }
}

以上方案供参考,如果有更好的方案也请提出。

@errorrik @leeight @otakustay @chriswong