纱线将模块添加到不同的目录

问题描述

我正在尝试使用 Yarn 在非常特定类型的项目结构中管理两种不同类型的依赖项。我的项目结构是这样的。

.
└── modules
    ├── foo.js
    └── require
        └── bar.js

其中 foo.jsbar.js 是我编写的模块。 现在,我还需要在此文件夹结构中包含第三方依赖项。我正在尝试使用 --modules-folder 标志。

有一个 modules/require 子目录的原因是我使用将自身附加到全局范围的模块,以及作为 AMD/Require.js 模块加载的模块 - 即使用 define 函数。因此,在此示例中,modules/foo.js 定义了一个全局 foo 函数,而 modules/require/bar.js 是一个 Require.js 模块。我知道这可能看起来很奇怪。我无法详细说明为什么以这种方式组织,但我只能说我受到此文件夹结构的限制。

现在,我需要的一些第三方依赖项将作为全局模块更好地工作——例如我希望能够做到这一点:

yarn add --modules-folder modules/lib lodash.forown

但其他依赖项可以定义为 Require 模块——例如我希望能够做到这一点:

yarn add --modules-folder modules/require/lib q

最后,我想要这个:

.
├── modules
│   ├── foo.js
│   ├── lib
│   │   └── lodash.forown
│   │       ├── ...
│   │       └── index.js
│   └── require
│       ├── bar.js
│       └── lib
│           └── q
│               ├── ...
│               └── q.js
├── package.json
└── yarn.lock

其中 lodash.forown 添加为全局依赖项,q 添加为 RequireJS 依赖项。

但是,在添加第二个依赖项后,我最终得到了这个:

.
├── modules
│   ├── foo.js
│   ├── lib
│   │   └── lodash.forown
│   │       ├── ...
│   │       └── index.js
│   └── require
│       ├── bar.js
│       └── lib
│           ├── lodash.forown
│           │   ├── ...
│           │   └── index.js
│           └── q
│               ├── ...
│               └── q.js
├── package.json
└── yarn.lock

请注意,当我为 lodash.forown 运行第二个 add 时,q 安装了两次。

我也试过这样的 --cwd 标志:

yarn add --cwd modules --modules-folder lib lodash.forown
yarn add --cwd modules/require --modules-folder lib q

但结果是一样的。我最终在 lodash.forownmodules/lib 中安装了 modules/require/lib

有没有简单的方法可以实现这一目标?

或者,我当前的 Yarn 版本是 1.22.10,但我正在阅读 Yarn 2 插件以查看是否可以使用自定义 add 标志扩展 --require 命令以将特定依赖项移入modules/require 子目录。

更新:

如果我只使用 NPM,我可以这样做:

npm install --save --prefix modules lodash.forown
npm install --save --prefix modules/require q

而且我确实得到了我期望的结构:

.
├── makefile
└── modules
    ├── foo.js
    ├── node_modules
    │   └── lodash.forown
    │       ├── ...
    │       └── index.js
    ├── package-lock.json
    └── require
        ├── bar.js
        ├── node_modules
        │   └── q
        │       ├── ...
        │       └── q.js
        └── package-lock.json

但是,如果我删除 node_modules 文件夹然后运行 ​​npm install,我不会重新创建依赖项文件夹。所以用处不大。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)