问题描述
我正在尝试使用 Yarn 在非常特定类型的项目结构中管理两种不同类型的依赖项。我的项目结构是这样的。
.
└── modules
├── foo.js
└── require
└── bar.js
其中 foo.js
和 bar.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.forown
和 modules/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 (将#修改为@)