【问题标题】:Unable to seperate public from private packages无法将公共包与私有包分开
【发布时间】:2018-10-22 12:01:04
【问题描述】:

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

--modules-folder public/components

这一切都很好,直到我决定将 node-sass 引入我的项目,这是一个后端包。

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

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

【问题讨论】:

  • 这是一种相当奇怪的做事方式。不是说它好坏,但它很奇怪。通常你会在 node_modules 中安装所有东西(使用 NPM 或 Yarn)并使用 laravel.mix 捆绑它们。你做事的方式实际上可能会使你的模块文件夹过度膨胀,因为依赖包的开发依赖项。
  • 你说得很好,我会这么做的!如果您将评论放入答案中,我会接受它,因为我认为这是要走的路

标签: node.js laravel npm yarnpkg


【解决方案1】:

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

  1. 使用单个包管理器(NPM 或 Yarn),因为混合它们通常效果不佳。 NPM 使用package-lock.json 和yarn 使用yarn.lock 来确定要下载的包版本,因此您最终可能会遇到依赖项不匹配。
  2. 使用webpack创建一个包,因为你使用的是Laravel,你应该使用Laravel Mix
  3. 如有必要,您可以extract vendor packages 创建更有可能访问浏览器缓存的捆绑包。
  4. 您也可以在样式表中使用 SCSS

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

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

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

总的来说,我认为编译资产是最佳实践。

【讨论】:

    猜你喜欢
    • 2015-12-27
    • 2014-02-01
    • 2014-05-28
    • 2023-04-01
    • 2013-10-10
    • 1970-01-01
    • 2011-06-18
    • 2011-01-05
    • 1970-01-01
    相关资源
    最近更新 更多