问题标签 [npm-workspaces]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
71 浏览

typescript - 打字稿模块导入 - 嵌套项目架构/npm-workspaces 中没有自动完成

我有一个相当复杂的设置,其中包含许多分布式 npm 包,它们相互需要。我试图尽可能地分解它。设置如下所示(每个子项目都有自己的 package.json):

应用程序:每个应用程序都是独立的,并使用所有库和通用库,每个都有自己的 package.json

通用:用于共享组件,但仅在应用程序中(依赖于所有库)

Libs:在其他项目和应用程序/公共、WIP 中使用的私有 npm 包,因此通过 npm-workspaces/git clone 使用/包含。因为它们是由工作区通过 npm install 添加的

我遇到的问题是,typescript/tsc 在“common”-module 的所有类中都抛出错误 ts(2307)。

从“@mynamespace/lib1/foo”导入 { BarInterface };

找不到模块“@mynamespace/lib1/foo”或其相应的类型声明。

一切都按预期工作,开发/构建运行没有错误,但 Visual Studio Code/Intellisense 和/或 tsc 无法共同接受提供的导入语句。因此没有可用的自动完成功能,我们高度依赖它,因为该项目应该很容易让新开发人员进入。

* package.json(根):

* package.json (lib):

* package.json(通用):

* package.json (app1):

所有 tsconfig.json 文件如下所示:

vite.config.js

我错过了什么,或者设置太复杂或打字稿不支持某种反模式?

0 投票
0 回答
25 浏览

npm - NPM Workspaces - 一些安装到本地 node_modules 目录的模块

我使用 npm 工作区。当我使用nmp i somepackage -w workspace-a它为工作区安装包时,如果安装的版本与根版本不同,则将其放置在与工作区相同的目录中。

我想将它移动到根 node_modules 目录的子目录。可能吗?

当前行为:

我想要的是这样的:

0 投票
0 回答
8 浏览

reactjs - 有没有办法将根包转换为 npm 工作区

我有一个项目结构,如:

我从根文件夹知道我可以将components1设置为工作区,但我的问题是我可以将projectx (root)本身转换/设置为工作区吗?

我想在components1中导入属于projectx (root)的东西,例如:

那可能吗?如何?

0 投票
0 回答
17 浏览

bash - 当工作区的命令失败时,npm 工作区命令不会停止执行

我有一个 bash 脚本,它为 npm 中的所有工作区运行测试。这是 bash 脚本:

现在在根package.json脚本中,在所有工作区上 test运行,如下所示:test"test": "npm run test -ws --if-present

问题:我有工作区 A、B、C 和 D。当 bash 脚本运行并且在工作区 A 上运行测试时出现故障或错误时,它会继续运行 B、C 和 D 的测试。

要求的解决方案:工作区 A 出现故障时立即停止执行并退出。

我尝试过的事情:使用陷阱收听 ERR 或 EXIT 并在陷阱中调用 EXIT 1。这没用。

0 投票
0 回答
39 浏览

create-react-app - 在 npm 工作区中使用 create-react-app 找不到模块“postcss-preset-env”错误

我正在尝试create-react-app在 Turborepo monorepo 中添加一个应用程序。

问题是,如果我npm install从 monorepo 的根目录运行,然后尝试通过运行来启动 CRA 应用程序npm run dev,我会在编译时收到以下错误:

加载 PostCSS“postcss-preset-env”插件失败:找不到模块“postcss-preset-env”

我注意到,如果我npm install从 CRA 应用程序文件夹 ( /apps/my-app) 中运行,然后npm run dev从 monorepo 的根目录运行,它运行得很好。

我还注意到,根据我运行npm install的位置,内容/apps/my-app/node_modules会有所不同,但我认为这是预期的行为。

如果我正确理解npm workspaces docs,您应该始终npm install从 monorepo 的根目录运行。

知道我在这里缺少什么吗?

我正在使用 npm 8.3.1。

这是一个带有示例的公共回购:https ://github.com/oncet/turborepo-cra

0 投票
0 回答
9 浏览

node.js - 在 TypeScript monorepo 中是否有将项目与另一个项目分开的工具?

我有一个带有多个 TypeScript 项目和共享库的 monorepo。我已经使用 npm 工作区实现了这个 monorepo,因此任何项目和共享库都有自己的 package.json。这是目录树的摘要:

任何项目都可以使用一个或多个共享库,并且只能使用这些库中的一些服务。我想从 monorepo 中“提取”一个项目,并提供它所依赖的库的服务。例如,如果我想提取project1依赖于service1fromlibrary1service2from 的library2,我想获得这个目录树:

是否存在完成这项工作的工具?

0 投票
1 回答
12 浏览

npm - 如何将 NPM 命令过滤为工作区模式(如过滤器、包含、排除、glob、grep 或子目录)?

我想组织一个大型 NPM monorepo,以便我可以根据类别或模式在许多(但不是全部)工作区上运行命令。

这可以是子目录,也可以是工作区名称中的模式,如前缀或后缀,但我看不到任何单独在 NPM 中的方法。


Yarn >= 2中,这可以使用带有全局模式的--includeor--exclude标志yarn workspaces foreach,例如:

...并且使用该名称空间和plugin-orpreset-前缀构建您的所有工作区。


lerna中,该--scope标志还采用了允许模式的 glob,例如:


但是在NPM中,据我所知,在 NPM 的v7v8工作区文档中,它似乎没有相同的功能:

  • 它有一个标志--workspace,可以多次使用来创建一个数组,但似乎只接受确切的工作区名称,
  • ...和一个似乎在所有工作区中运行的标志--workspaces

...但是我看不到任何方法可以在目录中的所有工作区或与模式匹配的所有工作区上运行。我真的不想在每个脚本中按名称列出每个工作区,因为它们会很多。