问题标签 [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.
npm - 如何在 npm 7 工作区中使用多个主要版本的依赖项
我有一个 NPM 7.0 工作区 monorepo。
几个子包使用不同的主要版本的依赖项。
但是,当我在其中一个包中使用依赖项时,似乎 NPM 工作区只能安装一个版本,并且在为我提供正确的主要版本时出现问题。
在 YARN 中,我可以将依赖项添加到noHoist
,但这似乎不存在或在 NPM 7.0 工作区中不工作。
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 的东西?
npm - NPM Workspaces monorepo - 以 root 身份共享本地包的分发文件夹,而不是整个源文件
使用 NPM 工作区,我components
与其他人(webapp1
和)共享一个包( webapp2
)。像这样的东西:
一切都运行良好,但文件夹components
中的所有内容,包括源代码src
正在共享。由于components
' 编译输出文件夹是dist
,我只想共享该文件夹。这是它在根目录中的样子node_modules
:
问题是当我需要导入webapp1
orwebapp2
时,我的导入路径必须包含该dist
文件夹。这是我从 VS Code 获得的智能感知:
这就是我导入webapp1
和的方式webapp2
:
虽然一切正常,但如何设置我的 NPM 工作区,以便仅dist
在其根目录中共享文件夹的内容?
我已经尝试过 NPM 的文件并.npmignore
在components
文件夹中忽略除dist
文件夹之外的所有内容,但这似乎不起作用。main
package.json 中的属性components
也设置为指向dist/index.js
:
有趣的是,如果我想导入dist/index.js
文件,我可以不用dist
:
...但是,导入除dist/index.js
需要dist
包含在路径中之外的任何内容。
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
它没有效果(同样的错误)。
非常感谢
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 1
and Cannot find module: '@my/shared'. Make sure this package is installed.
on构建失败import { X } from '@my/shared';
(复制/粘贴时缩进可能已损坏)
有人可以帮我弄清楚问题出在哪里?
####### 更新 #######
我发现问题可能是我使用 baseUrl 作为 project-a 的别名。它的 tsconfig 包含 baseUrl:"./src",它允许我导入文件而不会被 "../" 或 "src/" 抓狂。
npm-install - npm (v7.18.+) 安装,需要 --workspaces 标志吗?
如果我有一个带有工作区的项目并npm install
在根文件夹上使用,我是否需要该--workspaces
标志来安装所有工作区,还是自动使用它?
在我看来, npm install 已经自动完成了。
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
npm - npm 7 工作区中的 NPM 包依赖解析
问题:在 npm 7 工作区应用程序中,我有两个名为 a 和 b 的包。不知何故,如果这个包是相互依赖的,那么包 json 应该是什么样子。
在 yarn workspace / lerna 我们指向一个特定的版本而不是指向一个文件
ps:我会同时发布这两个包,一旦包发布,后面的工作是否会起作用(我猜不是,或者 NPM 团队创造了一些魔法)
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
为我处理这个吗?
node.js - 节点工作区——需要本地包
我正在使用node/npmworkspaces
的功能,布局是这样的:
npm install
一切都很顺利。但现在我想将包p1
作为依赖项添加到 package p2
。但是我该怎么做呢?我天真地尝试过:
但这会在安装时产生错误,告诉我p1
找不到注册表。