【问题标题】:Front-end Node NPM Modules and multiple downloads of same dependency前端节点 NPM 模块和相同依赖项的多次下载
【发布时间】:2016-08-05 02:24:01
【问题描述】:

有前端开发问题的节点/NPM 新手。我了解 NPM 类型模块的优势之一是它的依赖项安装在自身内部,在 node_modules 中。模块总是有他们需要的代码,外部库不会冲突。

也就是说,这似乎会导致客户端多次下载相同的 lib+ver(例如 jquery v.X)。指定模块需要依赖项但如果该依赖项已在站点/页面上可用,则不应打包该代码的技术是什么?所述技术是否涉及使共享 lib+ver 可用的父模块?

或者,各种前端模块是否应该只是重新下载页面上其他模块可能已经下载的相同 lib+ver?

【问题讨论】:

  • 我想当我编写构建脚本时,我不会连接共享库,并且我指定生成 html 脚本标记以下载共享库(如果模块要求)。也更适合浏览器缓存。或者,其他方式?我应该只连接特定模块所需的所有库而不担心额外的重量吗?

标签: node.js npm dependencies shared


【解决方案1】:

客户端只会从该文件夹中抓取需要的文件,因此如果它在 HTML 中链接一次,客户端只会抓取一次。 NPM 自动处理依赖重复。

话虽如此,通常您只想为客户端提供一个静态文件夹,而不会透露您的整个服务器结构。这可以通过以下方式实现:

app.use(express.static('server/public')

其中 'server/public' 是相对于您要提供的 server.js 文件的目录。在这种情况下,'public' 包含从 HTML 页面链接的所有链接视图文件、样式表、JS 文件等。您也不需要将该模块的依赖项移到那里。

这样做的缺点是您必须手动将依赖项移动到公用文件夹(我通常创建一个“供应商”目录)并从那里链接。虽然工作量更大,但从长远来看,它更高效、更安全。

注意:当使用静态文件夹提供文件时,您的 HTML 链接将从该文件夹的相对路径提供。

【讨论】:

  • 谢谢,joh ...中间件看起来是一个不错的安全选择。现在,我来自老式的手动 css 和 js 链接,并试图通过节点管理所有这些。实际上,我看到“webpack”允许“代码拆分”到 sharedLibs 与特定于页面的 js 文件……我现在更容易理解这一点:-)
猜你喜欢
  • 2015-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-20
  • 1970-01-01
  • 1970-01-01
  • 2014-06-09
  • 2019-03-08
相关资源
最近更新 更多