Javascript 如何使用gulp从以下配置自动生成

Javascript 如何使用gulp从以下配置自动生成,javascript,node.js,angular,gulp,loopback,Javascript,Node.js,Angular,Gulp,Loopback,背景 我有一个loopback和Angular应用程序,loopback使用服务器模型和api,使用它的sdk我们可以获得客户端服务 现在,我计划使用gulp自动化以下构建过程。 如果对模型进行了任何更改,则运行sdk命令并重新启动服务器/其次,当对angular文件进行任何更改时,运行sdk文件并从angular dist文件夹中提取文件,并重新启动服务器,我们最好使用浏览器的实时重新加载 这是我尝试过的,这似乎从来都不起作用。我已经为此工作了好几天 更新 我能够自动化大部分的东西,但有一个地

背景

我有一个loopback和Angular应用程序,loopback使用服务器模型和api,使用它的sdk我们可以获得客户端服务

现在,我计划使用gulp自动化以下构建过程。 如果对模型进行了任何更改,则运行sdk命令并重新启动服务器/其次,当对angular文件进行任何更改时,运行sdk文件并从angular dist文件夹中提取文件,并重新启动服务器,我们最好使用浏览器的实时重新加载

这是我尝试过的,这似乎从来都不起作用。我已经为此工作了好几天

更新

我能够自动化大部分的东西,但有一个地方失败了

gulp.task('browser-sync', function() {
  browserSync.init(null, {
    proxy: 'http://localhost:3000/home',
    browser: 'google chrome',
    port: 7000,
  });
  gulp.watch(['client/src/app/*.ts'], browserSync.reload);
  let watcher = gulp.watch(['./common/models/**.js', './server/**.js', 'gulpfile.js'], ['sdk', 'server']);
  watcher.on('change', function(event) {
    console.log('File ' + event.path + ' was ' + event.type + ', running tasks...'); // this watcher
  });
});

gulp.task('sdk', function() {
  spawn('./node_modules/.bin/lb-sdk', ['server/server.js', './client/src/app/shared/sdk', '-q'], {stdio: 'inherit'});
});
此监视程序重新启动服务器并运行sdk,但在sdk中失败

堆栈跟踪请帮助

via remoting. The Angular code for this scope won't be generated.
[19:29:37] Starting 'sdk'...
[19:29:37] Finished 'sdk' after 11 ms
[19:29:37] Starting 'server'...
[19:29:37] Finished 'server' after 17 ms
events.js:163
      throw er; // Unhandled 'error' event
      ^

Error: spawn ./node_modules/.bin/lb-sdk ENOENT
    at exports._errnoException (util.js:1050:11)
    at Process.ChildProcess._handle.onexit (internal/child_process.js:193:32)
    at onErrorNT (internal/child_process.js:367:16)
    at _combinedTickCallback (internal/process/next_tick.js:80:11)
    at process._tickCallback (internal/process/next_tick.js:104:9)
更新

我有多个gulp任务,其中一个任务是
ng build-w
,它发生在一个新目录中,我更改
进程。chdir
以更改路径,并且我还保留此sdk的选项卡,因此我需要再次检查路径。如何在我的繁殖中检查或给出绝对路径。如果这是故障的可能原因之一

  • 您确定已经运行了npm安装--save dev@mean expert/loopback sdk builder
  • 您确定
    gulpfile.js
    package.json
    位于同一目录中吗
  • 您确定存在
    /node\u modules/.bin/lb sdk
  • 你试过重新安装所有东西吗

  • 错误的答案很简单,您的spawn函数无法找到
    /node\u modules/.bin/lb sdk
    。这要么是因为该文件不存在,要么是因为相对于gulpfile.js无法找到该文件

    控制台中的错误表示“错误:无实体”。它来自UNIX,而不是节点本身,基本上只是转换为“未找到文件”,但它适用于各种通用的东西,而不仅仅是文件/目录


    检查文件
    /node\u modules/.bin/lb sdk
    是否确实存在。然后检查gulpfile是否位于相对于该目录的根目录中。

    考虑到您的更新

    可能发生的情况是,一旦您使用
    process.chdir
    为一个单独的任务更改了目录,并且您一直在监视所有的任务。路径设置为上一个路径,gulp任务无法找到sdk i:e
    spawn('./node_modules/.bin/lb sdk',['server/server.js','./client/src/app/shared/sdk','-q'],{stdio:'inherit'})在相应的路径中

    要解决此问题,您可以在
    sdk任务中添加以下检查

    gulp.task('sdk', function() {
      if (process.cwd() != __dirname) { // this checks for the current path 
        process.chdir(<change path>); // if it dosent match your base path change it here
      }
      spawn('./node_modules/.bin/lb-sdk', ['server/server.js', './client/src/app/shared/sdk', '-q'], {stdio: 'inherit'});
    });
    
    gulp.task('sdk',function(){
    if(process.cwd()!=\uuuu dirname){//这将检查当前路径
    process.chdir();//如果它与基本路径不匹配,请在此处更改它
    }
    生成('./node_modules/.bin/lb-sdk'、['server/server.js'、'./client/src/app/shared/sdk'、'-q']、{stdio:'inherit'});
    });
    
    它认为
    /node\u modules/.bin/lb sdk
    不存在。您能确认它确实是这样吗?或者更具体地说,它无法找到与您的gulpfile或运行gulp本身的目录相关的文件。eNONT是一个与spawn未找到相关文件有关的错误。我写这些评论是因为我不能百分之百地说答案就在于此,但请让我知道它是否在某种程度上有帮助,我会看看我是否能形成一个更可靠的答案。你对./node_modules/.bin/lb sdk持肯定态度吗?它存在吗?是的,如果我单独运行它,它只在作为注释的任务中起作用,我想我会试试你的代码。我猜二进制文件来自。我自己也能很好地工作,我想对于我的一个任务,我使用.process更改了ir,我想我需要再更改一次与此相关的内容,如何才能做到这一点对不起,我不理解你的问题我的问题是,我正在更改其中一个任务的目录路径并监视此sdk。我需要在这里再次检查目录吗?如果没有,请将提示符放在正确的位置,或者如何为我的独立进程提供静态路径