流程:在使用Yarn工作区的monorepo中解析模块

时间:2018-08-13 14:33:28

标签: flowtype monorepo yarn-workspaces

我们有一个使用Yarn’s ‘workspaces’ feature的monorepo,这意味着Yarn会尽可能地将依赖关系提升到monorepo的根node_modules目录,而不是将它们保留在单个程序包的node_modules目录中。这依赖于Node的模块解析算法,该算法继续在目录树的node_modules目录中搜索模块,直到找到所需的模块为止。

在导入另一个包(monorepo的内部或外部)的文件中使用Flow类型时,在包含该文件的包内运行Flow会引发Cannot resolve <package-name>错误。 Flow似乎使用了不同的模块解析算法,但由于已安装的模块被提升到根目录,并且Flow不会继续在目录树中搜索,因此失败。

除了从根目录运行Flow以外,还有其他方法吗?从根目录运行不是最佳选择,因为它不允许对monorepo中的不同软件包进行不同的设置。

节点版本: 10.8.0
flow-bin版本: 0.78.0

2 个答案:

答案 0 :(得分:0)

我也遇到了这个问题

要修复此问题,需要更新.flowconfig

[include]
../../node_modules/

FS结构:

/project_root
--/node_modules
--/packages
----/module1
------.flowconfig

答案 1 :(得分:0)

使用如下指令手动选择要提升的组件:

 DataLakeFileClient fileClient = new DataLakeFileClient(new
  Uri($"https://{accountName}.dfs.core.windows.net/{container}/{directory}/{filename}"), credential); 
UnicodeEncoding uniEncoding = new UnicodeEncoding();
using (MemoryStream memStream = new MemoryStream(100))
    {
    byte[] colString = uniEncoding.GetBytes("a,b,c,d,e,f");
    memStream.Write(colString, 0, colString.Length);
    
    memStream.WriteByte(0x0A);
    
    byte[] dataString = uniEncoding.GetBytes(string.Join(",", "val1","val2","val3","val4","val5","val6"));
    memStream.Write(dataString, 0, dataString.Length);
    memStream.Position = 0;
    fileClient.Upload(memStream); 
    }

或使用排除 glob 选择它们:

"nohoist": ["**/npm-package", "**/npm-package/**"]

有关详细信息,请参阅 my answer to another question