你的问题其实是相当广泛的 - 但是,我会试着列出尽可能多的。
比方说你是从头开始构建一个项目,包括vuejs, jquery, fontawesome
,但只需要包括几个文件的需要。
你在这里打的问题是关于npm模块的module dependency
。 (并且可以使用许多不同的工具来管理库依赖项的版本,并确保它们包含在项目中,即package managers
)。
确定 - 现在从这里,你可以对自己说:
,但我只需要说,one icon from fontawesome
在您的最终版本(DIST),我不想将我的所有模块到源代码控制
同样,这是您从源代码管理中省略node_modules和其他相关库(即包括node_modules
您.gitignore
)
重申
- 您可以安装所需的库,
- 添加
node_modules
到的.gitignore,
- 捆绑这些库到由消费厂商单个文件您的用户(可以通过
browserify/webpack/rollup/gulp/grunt/yarn
等)。
- 产生NPM脚本
内包现在你可能会问进一步 -
为什么要使用其中的任何工具? - 他们将我的注意力从复制/粘贴供应商库文件夹转移到我的源代码控制中。
构建工具被创造
- 简化开发管道,让你DONT不得不/粘贴供应商libaries复制到供应商的文件夹。
- 确保所有文件都捆绑到客户端自动
- 允许你跟踪/限制库的版本更新/通过在需要时
package.json
- 允许你添加其他构建步骤(如微小,md5hash版本,压缩,代码拆分,资产管理等)。
现在,让我们打破了原来的问题在这里:
- 如何保证其他开发商拿克隆库
- ,当他们需要我怎么保证我只能在提供一切必要的文件给最终用户(如果我只使用供应商库的特定部分?)
1.如何确保开发人员得到他们需要的东西
再次,重申上面,添加devDependancies和.gitignoring
允许您只添加必要的文件到您的项目。
2.我怎样才能确保客户得到他们所需要的,而不会膨胀请求文件?
这是构建工具,如webpack,browserify,gulp,grunt,rollup,尝试实现的地方。这是因为对于超过200kb文件大小的一些库,可能需要将这些文件分离到不同的客户端请求中(因此,不要求用户请求一个大文件,这是browserify项目的一个重要组成部分)。
您需要了解的第二种技术是使用特定的库,您可以使用import
mdn link,您可以从一个从属库中需要一个函数/类(这进一步减小了文件大小)。
另一种技术是使用较少的导入语句(可以提取较少的函数/样式类似于上面的,但目前在SCSS中不支持)。对于SCSS,你基本上只剩下复制/粘贴必要的样式到你的基本scss中,这也会节省你的空间。
编辑 如何创建npm install libaries
从您以上(约不想包括工具为您的工作流程所提到的意见束,有没有点概述任何一个特定的策略 - 你可以在网上找到关于如何为你的特定需求设置gulp/browserify/webpack的答案/教程)。
但是,因为您正在使用yarn
- 我将详细介绍这一点。
首先,yarn是一个包管理器(比如npm)。所有它与--modules-folder
一起将软件包安装到指定的文件夹中,就这些了。所以我们并不关心这个(因为它和npm一样)。 (即您的vendor
文件夹在许多方面与node_modules
相同)。
我们可以使用
- 的WebPack
- 一饮而尽
- 咕噜
- 汇总
- browserify
- 早午餐
(所有构建工具基本上允许您将所有这些包打包到单个入口点以打包到客户端)。
我不会进入如何,因为这是一个过程,你可以在网上找到,从上面的评论,我可以告诉你也不特别在意。
你在找什么是零配置JavaScript构建工具。 (极大地超出了原始问题的范围,我只会在单独的Q & A中回答)。
的工具,以便通过“提交”和“推送”你的意思是将你的代码做到你的代码库中?在这种情况下,您可以通过将您*不想提交的文件添加到'.gitignore'文件来做到这一点。 – DarkCygnus
@GrayCygnus是的。我可以使用'.gitignore'来忽略'vendor /',这对bulma起作用,因为使用'sass vendors/bulmna/style.scss assets/css/style.css'命令'我已经将所需的所有东西bulma从供应商到我的css目录。但是,例如vuejs呢?没有办法转移图书馆,还有许多其他的胖图书馆,如果我不使用99%的图书馆,我不想推动它。我理解这个问题可能并不明确,但我从工作流程的角度提出了更多的要求。就像在如何保持项目清洁一样 –
然后你可以使用更多的东西,比如Python'virtualenv'(现在不在PC上,因为它在节点上是等价的),所以你有独立的环境,每个环境都有自己的依赖和包。这听起来像是你可以使用的东西吗? – DarkCygnus