npm 和 yarn 的不同文件夹

Different folders for npm and yarn

我编写了一个 Web 应用程序,我使用 yarn 来管理 CSS 和 JavaScript 依赖项。 我决定开始使用 parcel、sass、typescript 等工具,我将它们作为开发依赖项添加到我的 package.json 文件中。

package.json文件在根目录下,但是我的yarn安装的依赖在/public/vendor/目录下,因为/public/目录外的东西是不直接的用户可以访问。所以我不能 link /node_modules/ 文件夹中的库到我的 HTML.

这是我的 /.yarnrc 文件的内容:

--modules-folder ./public/vendor --ignore-optional --production=true

问题在于,即使 yarn 会创建自己的 yarn.lock 文件,它也会考虑 package-lock.json 文件的内容。 因此,如果 npm 已经安装了依赖项,除非我明确声明要安装它,否则 yarn 不会安装它(这意味着它适用于依赖项,但不适用于依赖项依赖项)。

使用两个不同的包管理器是一个糟糕的设计理念。

相反,我编辑了我的 .htaccess 文件,以便 link 路径 /public/vendor 到 /node_modules 目录:

RewriteEngine on

RewriteCond %{ENV:REDIRECT_STATUS} 200
RewriteRule .* - [L]

RewriteCond %{REQUEST_URI}:: ^(/.+)/(.*)::$
RewriteRule ^(.*) - [E=BASE:%1,E=REL_URI:/%2]

RewriteCond %{ENV:REL_URI} ^/public/vendor/ [OR]
RewriteCond %{REQUEST_URI} ^/public/vendor/
RewriteCond %{REQUEST_URI} !.*\.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule public/vendor/(.*)$ %{ENV:BASE}/node_modules/ [L]

RewriteCond %{ENV:REL_URI} ^/public/ [OR]
RewriteCond %{REQUEST_URI} ^/public/
RewriteCond %{REQUEST_URI} !.*\.php
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule .? - [L]

RewriteRule .? %{ENV:BASE}/index.php [L]