下面的命令表示:"一旦GULP任务‘DevelopmentBuild’完成,启动Docker":

gulp developmentBuild && docker compose -up

然而,像developmetBuild这样的本地开发模式的任务通常永远不会结束,因为它们正在使用文件观察器,并将等待更改,直到进程被终止或发生严重错误.这developmetBuild人可能是这样的:

gulp.task('developmetBuild', ['browser-sync', 'css-libs', 'scripts'], function() {
    gulp.watch('app/sass/**/*.sass', ['sass']);
    gulp.watch('app/*.html', browserSync.reload);проекта
    gulp.watch(['app/js/common.js', 'app/libs/**/*.js'], browserSync.reload);
});

那么平行运行呢?

gulp developmentBuild & docker compose -up

有时,它不会奏效.例如,在下面的情况下,只有在构建了FrontServerEntryPoint之后才能启动nodemon.

version: "3.5"

services:

  FrontServer:

    image: node:16-alpine
    container_name: Example-Local-FrontServer
    ports: [ "8080:8080" ]

    # [ Theory ] Nodemon will not be found if invoke just "nodemon". See https://linuxpip.org/nodemon-not-found/
    # [ Theory ] About -L flag: https://github.com/remy/nodemon/issues/1802
    command: sh -c "cd var/www/example.com && node_modules/.bin/nodemon -L 03-LocalDevelopmentBuild/FrontServerEntryPoint.js --environment local"

    environment:
      - DATABASE_HOST=Database

    depends_on: [ Database ]

    volumes:
      - type: bind
        source: .
        target: /var/www/example.com

推荐答案

例如,在下面的 case 中,只有在构建了FrontServerEntryPoint之后,才必须启动 node .

这意味着您需要两个步骤:

  • 一个用于建筑(不含watcher个)
  • 一个用于并行运行

即:

gulp.task('initialBuild', ['css-libs', 'scripts']);

gulp.task('developmentBuild', ['initialBuild', 'browser-sync'], function() {
    gulp.watch('app/sass/**/*.sass', ['sass']);
    gulp.watch('app/*.html', browserSync.reload);
    gulp.watch(['app/js/common.js', 'app/libs/**/*.js'], browserSync.reload);
});

你可以用gulp initialBuild && (gulp developmentBuild & docker-compose up)来运行它

The 'developmentBuild' task has 'initialBuild' and 'browser-sync' as its dependencies.
This means that 'initialBuild' and 'browser-sync' tasks will run before the 'developmentBuild' task starts executing the function containing the watchers.


作为替代方法,您可以try 在Node.js中使用child_process.exec(npm install child_process之后)来运行初始构建,然后并行运行Docker Compose和Gulp Watcher.

node run-build-and-compose.js:

const { exec } = require('child_process');

exec('gulp initialBuild', (error, stdout, stderr) => {
  if (error) {
    console.error(`initialBuild error: ${error}`);
    return;
  }
  console.log(`initialBuild output: ${stdout}`);
  console.error(`initialBuild stderr: ${stderr}`);

  // Run the Gulp developmentBuild task and Docker Compose in parallel
  const devBuild = exec('gulp developmentBuild');
  devBuild.stdout.on('data', (data) => {
    console.log(`developmentBuild output: ${data}`);
  });
  devBuild.stderr.on('data', (data) => {
    console.error(`developmentBuild stderr: ${data}`);
  });

  const dockerCompose = exec('docker-compose up');
  dockerCompose.stdout.on('data', (data) => {
    console.log(`Docker Compose output: ${data}`);
  });
  dockerCompose.stderr.on('data', (data) => {
    console.error(`Docker Compose stderr: ${data}`);
  });
});

Node.js相关问答推荐

如何解决TypeError:requ.isAuthenticated不是函数错误?

即使DDB键不存在, node Lambda也不会失败,并返回NULL作为结果

自动将Selify打开的Chrome窗口移动到Mac OS中的第三个显示器

已知NPM无法在node.js V12上运行的问题

根据我的测试,为什么在编写Varint代码方面,NodeJS要比Rust快这么多?

请求正文未定义

后端如何保护数据不被用户提取其他用户的数据?

TS 后端开发:prismagenerate找不到已安装的@tsed/prisma包

是否可以在 NodeJS 代码库中的每个函数之前和之后添加 console.log?

SvelteKit应用程序立即退出,没有错误

express cors request.body formData显示undefined

为什么要加密 CSRF 令牌?

TypeError:在使用 Jest、Supertest、Express、Typescript 进行测试时无法读取未定义的属性(读取listen)

Handlebars:访问已被拒绝解析来自的属性,因为它不是其父级的自己的属性

添加git信息到create-react-app

无法获取 CSS 文件

AngularJS +sails.js

已安装全局 NPM 包但未找到命令

npm 出现无法读取依赖项错误

npm WARN 不推荐使用 graceful-fs@3.0.8:graceful-fs 版本 3