无法将 public 与私有包分开

Unable to seperate public from private packages

所以我一直在我的 Laravel 项目中使用 Yarn 包管理器来下载 public javascript 库,例如 jQuery 和 bootstrap。我的 .yarnrc 配置文件有一行指定模块目录,以便所有包都可用。

--modules-folder public/components

一切顺利,直到我决定将 node-sass 引入我的项目,它是一个后端包。

我的问题是 node-sass 及其所有依赖项最终都在我的 public/components 文件夹中。理想情况下,我只会将 Yarn 用于我的 public 包,将 npm 用于我的后端包(最终将在我的项目根目录中的 node_modules 中)。但他们都使用相同的 package.json 文件。

有没有办法拆分这些包管理器?还是我的做法完全错了。

正如我在评论中提到的,这是一种非常奇怪的设置方式。通常你会这样做:

  1. 使用单个包管理器(NPM 或 Yarn),因为混合使用它们通常效果不佳。 NPM 使用 package-lock.json 而 yarn 使用 yarn.lock 来确定要下载的包版本,因此您最终可能会遇到依赖不匹配的情况。
  2. 使用webpack to create a package bundle, since you are using Laravel you should use Laravel Mix
  3. 如有必要,您可以extract vendor packages创建更有可能命中浏览器缓存的包。
  4. 您还可以将 SCSS 用于样式表

Laravel Mix 将确保只有最少的必需文件实际包含在捆绑包中,此外源可以缩小,您还可以设置目标浏览器版本以将较新的 ES 6 语法转换为兼容 JavaScript。

不将模块直接放在 public 文件夹中的主要原因是:

  1. 您需要将它们作为模块加载,但 IE 根本不允许这样做。
  2. 您最终会将这些模块的所有依赖项和开发依赖项放在 public 文件夹中,这是不必要的。

总的来说,我认为编译您的资产是最佳做法。