问题标签 [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 投票
0 回答
327 浏览

npm - 如何在 npm 7 工作区中使用多个主要版本的依赖项

我有一个 NPM 7.0 工作区 monorepo。

几个子包使用不同的主要版本的依赖项。

但是,当我在其中一个包中使用依赖项时,似乎 NPM 工作区只能安装一个版本,并且在为我提供正确的主要版本时出现问题。

在 YARN 中,我可以将依赖项添加到noHoist,但这似乎不存在或在 NPM 7.0 工作区中不工作。

0 投票
1 回答
697 浏览

reactjs - NPM 7 Workspaces 安装多个版本的反应

我们有一个单一的仓库,我正在迁移到 npm 7 的工作区。

当前文件夹组织:

在 React 文件夹中运行npm ci会在 \React\node_modules 中安装 React 16.14,在 \React\apps\someApp\node_modules 中安装 17.0.0。当尝试运行应用程序时,由于安装了多个版本,我们会收到预期的钩子错误。但是我找不到任何明确需要 React 16.14 的东西?

0 投票
1 回答
1056 浏览

npm - NPM Workspaces monorepo - 以 root 身份共享本地包的分发文件夹,而不是整个源文件

使用 NPM 工作区,我components与其他人(webapp1和)共享一个包( webapp2)。像这样的东西:

一切都运行良好,但文件夹components中的所有内容,包括源代码src正在共享。由于components' 编译输出文件夹是dist,我只想共享该文件夹。这是它在根目录中的样子node_modules

在此处输入图像描述

问题是当我需要导入webapp1orwebapp2时,我的导入路径必须包含该dist文件夹。这是我从 VS Code 获得的智能感知:

在此处输入图像描述

这就是我导入webapp1和的方式webapp2

虽然一切正常,但如何设置我的 NPM 工作区,以便仅dist在其根目录中共享文件夹的内容?

我已经尝试过 NPM 的文件.npmignorecomponents文件夹中忽略除dist文件夹之外的所有内容,但这似乎不起作用。mainpackage.json 中的属性components也设置为指向dist/index.js

有趣的是,如果我想导入dist/index.js文件,我可以不用dist

...但是,导入除dist/index.js需要dist包含在路径中之外的任何内容。

0 投票
1 回答
729 浏览

typescript - 带有 Expo 和 Typescript 的 NPM 工作区

我正在尝试在 Typescript Expo 项目中使用 NPM 7 工作区。现在我想保持正常的 Expo 结构(使用根App.tsx文件),但我想隔离工作区中的某些部分代码。

我在工作区中编译 TS 代码时遇到问题。我尝试了很多方法来配置 TS 和/或 Webpack 配置,但没有成功。所以这里是重现它的最小文件结构:

这是根的相关部分./package.json

./tsconfig.json是最低限度的

./packages/core/package.json很简单

并且简单地为这个例子./packages/core/index.ts导出一个函数log()

最后, in ./App.tsx, 只是导入函数并尝试调用它

它不编译

当我尝试为网络构建(expo build:web例如)时,出现以下错误

我并不感到惊讶,因为该/node_modules目录被自愿排除在外。

所以我的问题是我需要做什么才能编译工作区代码?我希望它可以即时工作(即:未预编译),就像它是我项目中的一些常规文件一样。它完全可行吗?

一些失败的修复尝试

我主要尝试调整 tsconfig 以使其正常工作(尽管我想知道它是否会改变任何东西)

#1

我尝试添加"include": ["./node_modules/core"],. 它没有效果(同样的错误)。./tsconfig.json

#2

我尝试/packages/core/tsconfig.json使用复合选项创建以下内容:

并在根目录中引用它tsconfig.json

它没有效果(同样的错误)。

非常感谢

0 投票
0 回答
106 浏览

reactjs - Github Actions 在 JS monorepo 本地导入上构建失败

我在使用带有 Github Actions 的 npm 工作区时遇到问题。

我有以下文件夹结构

项目根:

  • ./package.json<- 与"workspaces": ["./shared", "./clients/project-a"]
  • ./tsconfig.json<- 与"compilerOptions":{"target":"es5","module":"esnext"},"references":[{"path":"./shared"},{"path":"./clients/project-a"}]
  • ./shared/*
    • ./tsconfig.json<- 扩展../tsconfig.json,与"composite":true
    • ./package.json<- 带脚本"prepare": "npm run build"
  • ./clients/project-a/*
    • ./tsconfig.json<- 扩展../../tsconfig.json

和. 4.3.2_ shared_clients/project-a

在我的本地环境中,我有 node 16.2.0

在本地环境中,清理 node_modules 和 package-lock,从 root 启动安装并clients/project-a使用npm run build -w @my/project-a它构建成功,没有错误。

当我尝试在 Github Action 工作流程中启动相同的命令(安装和构建)时,它首先clients/project-a使用exit code 1and Cannot find module: '@my/shared'. Make sure this package is installed.on构建失败import { X } from '@my/shared';

(复制/粘贴时缩进可能已损坏)

有人可以帮我弄清楚问题出在哪里?

####### 更新 #######

我发现问题可能是我使用 baseUrl 作为 project-a 的别名。它的 tsconfig 包含 baseUrl:"./src",它允许我导入文件而不会被 "../" 或 "src/" 抓狂。

0 投票
1 回答
73 浏览

npm-install - npm (v7.18.+) 安装,需要 --workspaces 标志吗?

如果我有一个带有工作区的项目并npm install在根文件夹上使用,我是否需要该--workspaces标志来安装所有工作区,还是自动使用它?

在我看来, npm install 已经自动完成了。

0 投票
1 回答
813 浏览

npm - NPM 7 工作区 - 多个 node_modules?

我无法使用 NPM 7 Workspaces 运行我的应用程序。我期望npm install从根文件node_modules夹中为我的每个工作区创建一个文件夹,类似于 Lerna。但是,当我npm install在根目录运行时,我只能node_modules在根级别获得一个。这是预期的吗?

之前 的示例结构npm i

之后 的示例结构npm i(注意只有一个package-lock.json/ node_modules):

节点版本:16.4.2

NPM 版本:7.18.1

0 投票
0 回答
191 浏览

npm - npm 7 工作区中的 NPM 包依赖解析

问题:在 npm 7 工作区应用程序中,我有两个名为 a 和 b 的包。不知何故,如果这个包是相互依赖的,那么包 json 应该是什么样子。

在 yarn workspace / lerna 我们指向一个特定的版本而不是指向一个文件

ps:我会同时发布这两个包,一旦包发布,后面的工作是否会起作用(我猜不是,或者 NPM 团队创造了一些魔法)

0 投票
0 回答
73 浏览

javascript - package.json 中的“导出”属性是否在工作区中工作?

我有一个 npm 包设置如下

主项目文件已为工作区正确配置,工作区 project.json 文件也是如此。

project/workspace_b/package.json 包含以下内容:

项目/workspace_a/index.js:

我希望这一行能够加载其中包含的默认导出,project/workspace_b/dist/folder_1/index.js但是我收到了错误Cannot find module: '@project/workspace_b/folder_1'

出口属性应该project/workspace_b/package.json为我处理这个吗?

0 投票
2 回答
1082 浏览

node.js - 节点工作区——需要本地包

我正在使用node/npmworkspaces的功能,布局是这样的:

npm install一切都很顺利。但现在我想将包p1作为依赖项添加到 package p2。但是我该怎么做呢?我天真地尝试过:

但这会在安装时产生错误,告诉我p1找不到注册表。