node.js - 在没有 npm install 的情况下使用 gulp 进行构建

标签 node.js build npm visual-studio-2015 gulp

我正在开发一个 Web 应用程序(JavaScript/C#,由 TFS 控制的版本),我们的团队希望开始使用 Visual Studio 2015。Microsoft 正在插入开发人员使用现有的流行工具(如 Gulp)来执行自动化任务,所以我'我们已经编写了一些将在服务器上运行的 Gulp 任务。

我的问题是我们的自动构建会在构建服务器上生成新的项目文件夹,因此如果不先运行 npm install,我就无法运行 gulp myBuildTask。 npm install 为构建过程增加了 2 多分钟,并且为每个构建下载相同的依赖项似乎非常低效(因为它们很少更改)。

我是否可以在不先运行 npm install 的情况下在新项目文件夹上运行 Gulp 任务?

我考虑过的选项:

  1. 在 TFS 中包含 node_modules。我无法将 node_modules 文件夹添加到 TFS(这会导致它存在于每个新构建文件夹中),因为 Bower 的嵌套依赖项具有文件路径Windows 太长了。我可以在没有 bower 的情况下走这条路,但我不确定我是否需要我的解决方案中的所有这些文件(其中大部分是不需要的,例如自述文件和测试文件)。

  2. 运行 npm install 在每次自动构建之后。 如前所述,我不想这样做,因为它会增加构建过程的几分钟时间。

  3. 全局安装 NPM 模块。 我不确定这是否可能,但我想知道我是否可以在构建服务器上全局安装所有项目依赖项(避免必须在项目级别安装)。我对这种方法的担忧是,我不想每次添加 gulp 插件时都必须手动更新构建服务器的全局安装的 NPM 模块。

理想情况下,解决方案类似于#3。这些模块将全局安装,但每个构建都可以运行 npm install 来验证每个模块是否已安装。如果一个新的 npm 模块被添加到 package.json,它将被下载。这个 npm install 会非常快,因为在大多数情况下,所有模块都已经存在(全局安装在构建服务器上)。

最佳答案

您可能会做一些事情:

  • 使 npm install 运行得更快。为此,请使用最新的 npm(如果可能)或使用 npm dedupe。与普通的 npm install 相比,运行 dedupe 可能会减少依赖性。然后运行 ​​npm shrinkwrap 创建 npm-shrinkwrap.json 文件,其中包含有关在 npm install< 期间安装的内容(以及版本)的“卡住”信息

  • 请记住,node_modules 只是一个目录,如果您可以将其复制/rsync 到您的安装中,则可以完全跳过 npm install 阶段

  • Node包解析方法是先尝试本地node_modules目录,如果不成功,(node_modules不存在或node_modules中缺少依赖)检查父目录的node_modules,然后是祖父目录等。这意味着,您不必全局安装包,半全局安装就足够了

:

my_project
    node_modules/
        dependency1
        dependency2
    build_001/ 
    build_002/
    build_00x/
        no node_modules here, 
        no deps here

但是请注意,这自然只有在您的依赖关系确实没有改变时才有效。由于在现实生活中您会不时安装新的东西,稍微增强的方法可能会有所帮助:按如下方式组织您的目录:

my_project
    ver_af729b
        node_modules
        build_001
        build_002
    ver_82b5f3
        node_modules
        build_003
        build_004

af729b82b5f3 是您的 npm-shrinkwrap.json 文件的(前缀)sha 哈希。如果您随后添加新的依赖项,shrinkwrap 文件会更新,构建脚本会创建新的 ver_something 目录并在其中执行 npm install。完成所有这些工作自然需要额外的工作,但应该会很有效。

----------------编辑--------------------

如果你不想完全避免 npm install(你只是想让它快点),你可以坚持典型的场景:你总是将源代码 check out 到同一个目录,然后让 npm install 尽可能重用旧的 node_modules

如果你总是想为你的构建创建一个新目录,你仍然可以创建一个 node_modules 符号链接(symbolic link)到旧版本的 node_modules - 同样在这种情况下,npm将尽可能多地从符号链接(symbolic link)文件夹中重用。

关于node.js - 在没有 npm install 的情况下使用 gulp 进行构建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34681284/

相关文章:

mysql - 如何使用 Node.js 将数据保存到 mysql 服务器

build - Scons - Fortran 文件的构建顺序

build - 指定 sphinx 输出的构建目录路径?

java - CompilationParticipant 包是否可用于 headless PDE 构建?

javascript - 将 CURL 命令转换为 NPM 请求调用

node.js - 无法使用 npm 运行任何子进程

javascript - 运行 js discord bot 时出错

node.js - 如何将不同文件的所有导出合并为一个?

Reactjs 项目创建时未找到react-dev-utils

javascript - NODE.JS - 使用 URL.parse 传递路径名