Skip to content

Latest commit

 

History

History
46 lines (45 loc) · 2.22 KB

umi-father.md

File metadata and controls

46 lines (45 loc) · 2.22 KB

多包入口问题:

源码地址
源码指向的master分支,可能代码会改变,这里拷贝下来:

const userConfig = getUserConfig({ cwd });
let pkgs = readdirSync(join(cwd, 'packages'));
// support define pkgs in lerna
if (userConfig.pkgs) {
  pkgs = userConfig.pkgs;
}
// 支持 scope
pkgs = pkgs.reduce((memo, pkg) => {
  const pkgPath = join(cwd, 'packages', kg);
  if (statSync(pkgPath).isDirectory()) {
  // 注意这里
    if (pkg.startsWith('@')) {
      readdirSync(join(cwd, 'packages', pkg)).filter(subPkg => {
        if (statSync(join(cwd, 'packages', pkg, subPkg)).isDirectory()) {
          memo = memo.concat(`${pkg}/${subPkg}`);
        }
      });
    } else {
      memo = memo.concat(pkg);
    }
  }
  return memo;
}, []);

多包打包问题

father默认打包顺序是按文件夹名称顺序,
我们项目中my-test是排在umi-origin-test的,
此时father会先打包my-test, 但是my-test引用了umi-origin-test,这时打包就会报错或者获取不到最新的umi-origin-test代码
所以father提供了pkgs配置来管理打包优先级,但是它不能传以下格式的包,否则会报错,我们看上面的源码也知道原因
pkgs: ['@demo/umi-origin-test', '@demo/my-test'],issues

所以我们的解决办法是:

临时配置pkgs为(其实也可以不配置,我这里只是为了排除其他包的影响,也是为了演示上面源码的逻辑): pkgs: ['@demo'],
然后运行两次yarn build
当然还有其他方式解决,如:
在每个包中添加father build命令
添加这个命令的时候记得在当前包中添加father依赖(参考lerna添加方式或者yarn workspace方式),
此时会在当前包创建node_modules文件夹,在其中创建fatherbin脚本指引
然后用lerna run命令来执行,
但是不推荐这种方式,这种方式有悖umi-father的设计思路