我使用yarn工作区并具有以下软件包:
我希望能够像使用import map from 'lodash/map'
一样从x-core子目录导入符号,例如:
import { fn } from '@mycompany/x-core/test';
但是出现以下错误:
tsc -b packages/x-core packages/x-cli
packages/x-cli/src/main.ts:1:20 - error TS2307: Cannot find module '@mycompany/x-core/test'.
1 import { fn } from "@mycompany/x-core/test";
~~~~~~~~~~~~~~~~~~~~~~~~
error Command failed with exit code 1.
但是,如果将其导出到库的根目录中,则该方法有效:
import { otherFn } from '@mycompany/x-core';
基于lerna-yarn-workspaces-example:https://github.com/julienfouilhe/example-subdirectory-workspace-typescript-import
,我在Github上做了一个小项目,以准确显示我的设置。有没有办法做到这一点,我找不到任何有效的方法。我对模块分辨率了解不多,所以我无法确切指出问题所在!
答案 0 :(得分:1)
在构建时移至根部是可行的,并且避免了工具问题,但是如上所述,这使构建变得复杂,尤其是在工作空间中共享时。 "exports" field node 14是一项重要的更改,最终将使支持子目录的导出更加容易,但目前它只能解决部分问题,因为其他工具似乎还没有遵守该领域。可以使用打字稿的路径解析来解决上述特定错误,可以使用根目录下"baseUrl"
文件中的"paths"
和tsconfig.json
选项,然后使用"extends"
来{ {3}}。不幸的是,如果lib最终被webpack内置的东西所使用,而您正在使用v4,则需要配置自定义路径解析步骤,因为webpack没有share that config字段。如果可以使用,它似乎确实是webpack 5的一部分。因此,如果您不在lib仓库之外发布lib,则可以解决此问题,而无需使用较新的工具和一些配置工作将所有内容移至根目录。
答案 1 :(得分:0)
对此进行更新:使用Nodejs 14,您可以在package.json中指定子路径导出。
https://nodejs.org/api/esm.html#esm_subpath_exports
我还没有亲自测试过,但是看起来它可以使用解决此问题
"exports": {
".": "./lib"
}