2016-08-04 79 views
0

具有前端开发问题的节点/ NPM新手。我明白一个NPM类型模块的优点之一就是它的依赖关系自己安装在node_modules中。模块总是有他们需要的代码,而外部的库不会发生冲突。前端节点NPM模块和多次下载相同的依赖关系

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

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

+0

我想,当我编写脚本构建时,我不会共享共享库,并且我指定生成html脚本标记来下载共享库,如果需要模块的话。浏览器缓存也更好。或者,其他方式?我是否应该将所有特定模块所需的库连接起来,而不必担心额外的重量? –

回答

0

客户端将只抓取该文件夹中需要的文件,所以如果它在HTML中被链接,一旦客户端将只抓取一次。 NPM自动处理相关性重复。

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

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

其中“服务器/公众”是相对于要服务于server.js文件的目录。在这种情况下,'public'包含从HTML页面链接的所有链接的视图文件,样式表,JS文件等。您也不需要在那里移动该模块的依赖关系。

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

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

+0

谢谢,joh ...中间件看起来像一个很好的安全选项。现在,我来自老式的手动css和js链接,并试图让我的头管理所有通过节点。其实我看到“webpack”允许将代码分割为sharedLibs和页面特定的js文件......我在这一点上更加轻松地做到了这一点:-) –