如何使用gulp从以下配置自动化构建

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用gulp从以下配置自动化构建相关的知识,希望对你有一定的参考价值。

背景

我有一个环回和Angular应用程序,Loopback使用服务器模型和api,并使用它的sdk我们能够获得客户端服务。

现在我计划使用gulp自动执行以下构建过程。如果模型中有任何更改,则运行sdk命令并重新启动服务器/其次,当角度文件发生任何更改时,运行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,它发生在同一个新目录中,我改变了process.chdir来改变路径,我还保留了这个sdk的标签,所以我需要再次检查她的路径。我如何在我的产卵中检查或给出绝对路径。如果这是失败的可能原因之一

答案

考虑到您的更新

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

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

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'});
});
另一答案
  1. 你确定你运行npm install --save-dev @mean-expert/loopback-sdk-builder
  2. 你确定gulpfile.jspackage.json在同一个目录吗?
  3. 你确定./node_modules/.bin/lb-sdk存在吗?
  4. 你试过重新安装一切吗?

错误的答案只是你的spawn函数找不到./node_modules/.bin/lb-sdk。这可能是因为该文件不存在,或者因为它无法相对于您的gulpfile.js找到

控制台中的ENOENT错误意味着“错误:没有实体”。它来自UNIX,而不是Node本身,基本上只是转换为“找不到文件”,但适用于各种通用的东西,而不仅仅是文件/目录。

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

以上是关于如何使用gulp从以下配置自动化构建的主要内容,如果未能解决你的问题,请参考以下文章

gulp+webpack配置

gulp的使用之gulpfile.js文件的配置

八Gulp自动化构建工具

自动化构建工具gulp

前端自动化构建工具-gulp

基于 Laravel 开发博客应用系列 —— 从测试开始:使用Gulp实现自动化测试