【问题标题】:How to automate the build from the following configuration using gulp如何使用 gulp 从以下配置自动构建
【发布时间】:2018-05-27 19:16:40
【问题描述】:

背景

我有一个 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,它发生在一个新目录中,同样我更改了 process.chdir 以更改路径,并且我还保留了这个 sdk 的标签,所以我需要再次检查路径她 。我如何在我的 spawn 中检查或给出绝对路径。如果这是失败的可能原因之一

【问题讨论】:

  • 它认为./node_modules/.bin/lb-sdk 不存在。你能确认它确实有吗?
  • 或者更具体地说,它找不到与您的 gulpfile 或您运行 gulp 本身的目录相关的它。 ENOENT 是与 spawn 未找到相关文件有关的错误。我把这些写成 cmets 是因为我不能 100% 说这就是所有答案,但如果它在某种程度上有帮助,请告诉我,我会看看我是否能形成一个更可靠的答案。
  • 你能对 ./node_modules/.bin/lb-sdk 持肯定态度吗?它存在吗?
  • 是的,如果我单独运行它,它只适用于该任务

标签: javascript node.js angular gulp loopback


【解决方案1】:

考虑到您的更新

可能发生的情况是,一旦您使用 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'});
});

【讨论】:

    【解决方案2】:
    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 是否位于相对于该目录的根目录中。

    【讨论】:

    • 作为说明,我想我会试试你的代码。我假设二进制文件来自loopback-sdk-builder。我自己让它正常工作
    • 我认为对于我的一项任务,我更改了 using.process 并认为我需要更改相对于此的 agin,我该怎么做
    • 对不起,我不明白你的问题
    • 我的问题是,我正在更改其中一项任务的目录路径并监视此 sdk。我需要在这里再次检查目录吗?如果没有将提示放在正确的位置,或者我怎样才能为我的个人进程提供静态路径
    猜你喜欢
    • 2018-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-13
    相关资源
    最近更新 更多