小编tk4*_*421的帖子

使用yarn link使用具有peerDependency的本地npm包时出现问题

当我尝试使用styled-components.

出于本示例的目的,我们假设我们有两个存储库,app并且core将由core消耗app

目前,core是用 TypeScript 编写并使用tsc.

为了快速迭代,我尝试使用yarn link链接coreapp.

这对于appfind core... 我面临的问题是,当编译后的 TypeScript 代码core尝试需要一个包时,比如说,它尝试在of (而不是of )styled-components中找到这个包。由于我同时拥有 peerDependency 和 devDependency ,因此可以在s中找到它,但这不是我想要发生的事情。我希望它使用.node_modulescoreappstyled-componentscorenode_modulesstyled-componentsapp

我尝试过的一种替代方法yarn link是添加coreto appvia的依赖项file:/path。这似乎按预期工作,但引入了新问题。我怎样才能让我的开发机器存在于package.json本地开发中(而不需要不断地来回切换)?另外,似乎任何更新都core需要从 中删除该包app,并在重新添加之前清除纱线的缓存。

有没有更简单的方法可以让这个场景发挥作用?我刚刚开始将 Rollup 或 Webpack 作为解决方案,但不确定这是否是正确的方向。

typescript rollupjs yarnpkg npm-link peer-dependencies

5
推荐指数
2
解决办法
9347
查看次数

有条件地指向 package.json 中的主字段

我在 Lerna 和 Yarn 工作区下有一个 Monorepo。该存储库包含发布到 npm 并在 monorepo 外部和 monorepo 内部使用的包。在 monorepo 中开发时,我们希望所有此类包的main字段都package.json指向该src目录,而当在 monorepo 外部使用包时,我们希望使用者使用文件夹中的转译代码dist

我希望这在包的所有使用中保持一致,我当前的解决方案是让字段main指向dist文件夹。然后,对于 monorepo 中的每个工具,即jesttscwebpackparcel我必须想出一个不同的工具特定解决方案来为src目录而不是dist目录设置别名。但我不喜欢这样的事实:我必须为每个工具做这项工作。它似乎无法扩展。

有没有人提出一个较低级别的解决方案,其中模块根据环境解析到不同的文件夹?

谢谢。

node.js npm monorepo yarnpkg yarn-workspaces

5
推荐指数
1
解决办法
784
查看次数

什么是纱线中的“提升清单”

当尝试使用纱线安装包时,出现以下错误:expected hoisted manifest for \"myPackage#@material-ui/core#react-dom\"

但目前尚不清楚“悬挂清单”到底是什么。

javascript npm yarnpkg

5
推荐指数
1
解决办法
4270
查看次数

无法完成离子电容器添加android命令

我正在尝试通过运行以下命令将 android 作为受支持的平台添加到我的项目中:离子电容器添加 android。

该命令被执行并在一个提示处停止,该提示询问我“您想使用哪个 npm 客户端?(使用箭头键)纱线是唯一的选择。

问题是我被困在这一点上,按箭头键没有注册任何东西(这些键工作正常),我什至无法选择给我的唯一选项

到目前为止,我已经尝试过:卸载纱线创建新项目删除 node_modules 更新所有模块

似乎没有任何效果。从好的方面来说,虽然当我尝试在另一台机器上执行这些步骤时,一切都运行良好,但我从未收到提示,这使得它仅对我的主工作站而言是独一无二的。我仍在试图弄清楚为什么我在这台特定机器上遇到问题

npm yarnpkg angular ionic4 capacitor

5
推荐指数
2
解决办法
4623
查看次数

yarn无法使用节点12.1.0构建node-sass

我正在尝试用以下方式安装我的软件包 yarn install

我已经12.1.0安装了节点,据我了解,node-sass至少需要版本4.12+才能与节点12一起使用

我的package.json文件是这样的:

{
  "name": "redacted",
  "private": true,
  "dependencies": {
    "@rails/webpacker": "3.5",
    "babel-preset-react": "^6.24.1",
    "bootstrap": "^4.1.2",
    "font-awesome": "^4.7.0",
    "js-md5": "^0.7.3",
    "moment": "^2.22.2",
    "prop-types": "^15.6.2",
    "qrcode.react": "^0.8.0",
    "react": "^16.4.1",
    "react-big-calendar": "^0.19.2",
    "react-dom": "^16.4.1",
    "react-loading": "^2.0.3",
    "react-router": "^4.3.1",
    "react-router-dom": "^4.3.1",
    "react-transition-group": "^2.5.0",
    "urijs": "^1.19.1"
  },
  "devDependencies": {
    "webpack-dev-server": "2.11.2"
  }
}
Run Code Online (Sandbox Code Playgroud)

我得到的(截断)错误是:

../fsevents.cc:85:58: error: expected ';' after top level declarator
void FSEvents::Initialize(v8::Handle<v8::Object> exports) {
                                                         ^
                                                         ;
30 warnings and 14 errors generated.
make: *** …
Run Code Online (Sandbox Code Playgroud)

javascript node.js yarnpkg

5
推荐指数
1
解决办法
712
查看次数

“错误命令“encore”未找到。” 在 Symfony4 中运行“yarn run encore”时

我在 Symfony 4.2 项目中工作,并尝试使用 Bootstrap 主题(所以我需要编译 Sass 代码)。我按照官方文档中给出的流程进行操作,该文档指示使用 webpack-encore。但我在根据文档使用它时遇到错误。

这是指示该过程的页面: https://symfony.com/doc/current/frontend/encore/simple-example.html

所以我安装了 Encore,然后启动yarn run encore. 这是终端中的内容:

yarn run v1.16.0
warning package.json: No license field
error Command "encore" not found.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
Run Code Online (Sandbox Code Playgroud)

所以我访问了错误中指示的网站,其中显示:

您可以在 package.json 文件中定义脚本。

如果我查看根目录中的 package.json,它确实只显示:

  "devDependencies": {
    "bootstrap": "^4.3.1",
    "jquery": "^3.4.1",
    "node-sass": "^4.12.0",
    "popper": "^1.0.1",
    "sass-loader": "^7.0.1"
  }
}
Run Code Online (Sandbox Code Playgroud)

没有任何 encore 命令的脚本:-(

不过其余的似乎都不错。这是composer.json的摘录:

...
    "require": {
...
        "symfony/webpack-encore-bundle": "^1.5",
...
    },
...
Run Code Online (Sandbox Code Playgroud)

我有一个 webpack.config.js 。

我运行了composer require encore并且 …

yarnpkg webpack-encore symfony4

5
推荐指数
0
解决办法
1万
查看次数

Yarn monorepo:在某些包上运行 Yarn 脚本,但不是全部

我正在尝试在我的一些工作区包中运行测试,但不是全部

从 monorepo 根我想运行类似的东西

yarn workspaces run test --exclude package3
Run Code Online (Sandbox Code Playgroud)

或者

yarn workspace package1 package2 run test
Run Code Online (Sandbox Code Playgroud)

但这些命令都无效。

谁能建议一个解决方法?

yarnpkg yarn-workspaces

5
推荐指数
0
解决办法
320
查看次数

不用--cwd将纱线转移到其他路径

我有一个带有根文件夹和客户端文件夹的项目,两者都有package.json文件。

在根文件夹上,我永远都不想安装任何软件包。相反,我希望运行该命令$ yarn add some-package会将其自动添加到客户端文件夹中,就像我愿意那样$ yarn add some-package --cwd ./client

我尝试在cd clientyarn --cwd ./client中进行操作scripts.preinstall,但没有成功,我认为是因为preinstallinstall是不同的过程。

我还尝试在其上运行cusotm bash脚本,preinstall但没有找到将args从命令行传递给它的方法,因此它们被毛线“弄肿”了。

任何想法如何做到这一点?

我对bash相当陌生,但是我可以在一些指导下研究解决方案。

在此先感谢,祝您度过愉快的一天!

PS。我可以通过在shell上劫持yarn命令来对其进行破解,并检查我是否位于上述项目文件夹中,并且该命令是否为yarn add,但是我希望为所有开发人员提供一个解决方案,而不污染我的shell。

npm yarnpkg

5
推荐指数
1
解决办法
107
查看次数

为什么在增加 package.json 中的版本后运行 yarn install 时我的 yarn.lock 文件会发生变化?

我已经通读了有关 yarn 命令和 yarn.lock 的文档,我相信 yarn.lock 文件的全部意义在于使用该文件中指定的版本。

我很好奇的是:yarn.lock 中指定的版本什么时候实际使用?我在 package.jsonyarn install和 reran 中手动更改了一个包的版本,并且更新了 yarn.lock 文件以使用新版本。我认为它会被锁定,因此在 package.json 中指定什么新版本并不重要,只要 yarn.lock 为该包指定了一个版本,它就会使用旧版本。

如果这就是 yarn.lock 应该如何工作,那么为什么不在 package.json 中指定 EXACT 版本,而不是在版本号前面使用 ~ 或 ^ 。现在我必须这样做,以便在运行时不更改 yarn.lock 文件yarn install

那么什么时候真正使用锁定版本/这是使用yarn.lock的正确方法吗?

yarnpkg yarn-lock.json

5
推荐指数
1
解决办法
4202
查看次数

纱线工作区依赖安装位置问题

我有一个使用纱线工作区的项目。该项目的结构是:

package.json
packages
  - project A
  - project B
  - project C
Run Code Online (Sandbox Code Playgroud)

当我运行时yarn install,这些包将安装在项目根node_modules中。最近我添加了另一个项目(D)并运行了yarn install. 对于项目 D,其中安装了一些依赖项,projectD/node_modules因此我在根目录中有一些依赖项,在 projectD 中有一些依赖项,当我运行项目时,它会导致错误。

无论如何,我可以“强制”yarn 在根节点模块中安装所有依赖项吗?

yarnpkg yarn-workspaces

5
推荐指数
1
解决办法
2290
查看次数