依次运行两个Angular CLI任务,使用--watch

依次运行两个Angular CLI任务,使用--watch,angular,angular-cli,angular-cli-v6,Angular,Angular Cli,Angular Cli V6,我有两个任务,需要互相跟踪: ng build <library-name> && ng serve ng构建和ng服务 我想在上监视文件更改,因此我添加了以下内容: ng build <library-name> --watch && ng serve ng构建--监视和服务(&G) 这显然不起作用,因为手表永远不会结束,所以ng发球永远不会被叫来 ng build <library-name> --watch &am

我有两个任务,需要互相跟踪:

ng build <library-name> && ng serve
ng构建和ng服务
我想在
上监视文件更改,因此我添加了以下内容:

ng build <library-name> --watch && ng serve
ng构建--监视和服务(&G)
这显然不起作用,因为手表永远不会结束,所以ng发球永远不会被叫来

ng build <library-name> --watch & ng serve
ng构建--监视和ng服务
这种解决方案也不好,因为ng服务在ng构建完成之前就开始了

有没有办法从第一个ng构建捕获编译完成消息,然后让file watcher运行?有什么方法可以启动观察者吗?可能是这样:

ng build <library-name> && --watch-the-libary-please & ng serve
ng build&&--请观看图书馆&ng service

好的,我可能已经为您找到了解决方案。我已经编写了简单的Python脚本,它将通过计算目录的sha1sum来检查目录(在本例中是您的库)是否已被更改。如果它实际上已更改,则它将运行您的命令,用于ng buildng serve

导入时间
导入操作系统
从checksumdir导入dirhash
目录='/YOUR/PATH/TO/LIBRARY'
initial_sha1=dirhash(目录'sha1')
修改=错误
“修改”为False时:
当前_sha1=dirhash(目录'sha1')
如果首字母_sha1!=现任主席1:
打印(“文件已挂起”)
操作系统(“ng构建”)
操作系统(“ng服务”)
修改=真
其他:
时间。睡眠(10)
如果您希望无限期地运行此操作,而不是将标志
modified
更改为True,请将初始值sha更改为当前值
initial\u sha1=current\u sha1
,并在需要时终止程序

您可能需要安装此软件包:

pip install checksumdir
这在Python2.7和3.X下工作(为此,您可能需要使用pip3安装checksumdir)

编辑 您可能需要在构建应用程序的目录下执行此脚本,或在ng buld

操作系统('cd/PATH/WHERE/YOU/BUILD')
您可以使用npm包,它允许并行运行多个命令。

我也有同样的问题,我可以想出一个解决方案。所以,把它留在这里

有了以下脚本,
npm start
将同时启动
ng build my lib
ng build service
,无论您在
my app
my lib
中做什么更改,都将触发生成

要执行的步骤包括:

  • 删除我的库输出路径中的目录
    dist lib
  • 使用
    --watch
    选项开始构建我的库
  • 运行
    等待lib.js
    直到创建my lib输出目录
  • 为我的应用启动开发服务器
  • package.json

    {
    “脚本”:{
    “开始”:“npm运行所有清理:lib——并行开始:*”,
    “start:app”:“node./scripts/wait-for-lib.js&&ng serve”,
    “start:lib”:“ng构建我的库——观察”,
    “clean:lib”:“shx rm-rf./dist lib”
    },
    “依赖性”:{
    “npm全部运行”:“^4.1.5”,
    “shx”:“^0.3.3”
    }
    }
    
    angular.json

    {
    “项目”:{
    “我的应用程序”:{
    ...
    “建筑师”:{
    “构建”:{
    ...
    “选择”:{
    “outputPath”:“dist”
    },
    ...
    }
    }
    },
    “我的自由”:{
    ...
    “建筑师”:{
    “构建”:{
    ...
    “选择”:{
    “outputPath”:“dist lib”
    },
    ...
    }
    }
    },
    },
    “defaultProject”:“我的应用程序”
    }
    
    ./scripts/wait-for-lib.js

    const fs=require('fs');
    常量pathToMyLib='./dist-lib/my-lib';
    函数waitFor(路径){
    log(`Waiting for${path}已创建…`);
    如果(!fs.existsSync(路径))
    setTimeout(()=>waitFor(路径),1000);
    }
    waitFor(pathToMyLib);
    
    如果不查看第一个,则只能让它们一个接一个地执行。另一种方法是在单独的会话中执行构建命令。是的,这是我们现在的解决方法,但我希望有更好的解决方案。编写一个bash脚本来实现这一点。如果需要定期触发,您甚至可以创建自定义服务。@ForestG您可以看看我的解决方案,它对您有用吗?它将在对lib进行任何更改后重建并提供服务。所以现在您不需要--wach标志,因为脚本正在保护更改。或者我把它复杂化了。无论如何,我想知道你的想法。谢谢,但这并不能解决我的问题:我需要在第一个构建完成后启动第二个进程。你可以运行
    ng build&&并发“ng build--watch“ng serve”
    。是的,这个解决方案很有效,但是,您也可以不使用它:这基本上与
    ng构建关税库&&(ng构建关税库--监视和服务)
    Hmmm。。。这个答案是“足够好”,但实际上并没有达到OP的要求。这会并发(obv)运行它们,而不是按顺序运行。谢谢你,但是仅仅为了这一点而使用python是一种过分的做法。此外,我相信此脚本每次都会重新运行ng serve,而不会停止前一个脚本?@ForestG Yep它不会重新运行ng serve,但这很容易实现。我只是一开始没想清楚。