【问题标题】:The following gulp task is not working on windows but working on ubuntu以下 gulp 任务不适用于 Windows,但适用于 ubuntu
【发布时间】:2018-06-07 08:45:53
【问题描述】:

gulp 任务

/* Run the npm script npm run buildLsdk using gulp */
gulp.task('sdk', function() {
  if (process.cwd() != basePath) {
    process.chdir('..');
    // console.log(process.cwd());
  }
  spawn('./node_modules/.bin/lb-sdk', ['server/server.js', './client/src/app/shared/sdk', '-q'], {stdio: 'inherit'});
});

我得到以下堆栈跟踪,但我无法调试

Error: spawn ./node_modules/.bin/lb-sdk ENOENT
    at exports._errnoException (util.js:1022:11)
    at Process.ChildProcess._handle.onexit (internal/child_process.js:193:32)
    at onErrorNT (internal/child_process.js:359:16)
    at _combinedTickCallback (internal/process/next_tick.js:74:11)
    at process._tickCallback (internal/process/next_tick.js:98:9)
    at Module.runMain (module.js:607:11)
    at run (bootstrap_node.js:420:7)
    at startup (bootstrap_node.js:139:9)
    at bootstrap_node.js:535:3

我在节点模块中也有所有必要的文件,非常感谢任何帮助。

更多关于上述文件使用的参考 - https://github.com/rahulrsingh09/loopback-Angular-Starter/blob/master/gulpfile.js

【问题讨论】:

  • gulpfile相对路径./node_modules/.bin/lb-sdk有效吗?
  • 是的 gulp 文件与节点模块在同一步骤中,cd 到该文件夹​​工作
  • 导入文件路径,然后尝试使用 path.resolve 函数解析 node_modules 文件? var path = require('path'); path.resolve(文件)
  • 您是否在更长的进程中运行此管道?您可以尝试单独运行此任务并告诉我们结果是否相同吗?
  • @GMaiolo yup 独立尝试过与管道任务相同的错误,在我的 linux 机器上可以正常工作

标签: javascript gulp


【解决方案1】:

我认为这是因为 lb-sdk.cmd 是您应该在 Windows 上运行的文件。当我将命令更改为以下时,错误消失了。请注意windows风格的目录斜线与linux不同。

gulp.task('sdk', function() {
spawn(
  '.\\node_modules\\.bin\\lb-sdk.cmd',
  [
    '.\\server\\server.js',
    '.\\client\\src\\app\\shared\\sdk',
    '-q'
  ], {stdio: 'inherit'}
);
});

我找到了更多信息,我将发布我找到的第二个答案(以上一个已被接受)。

如果您想避免在 windows/linux 中更改目录,您可以使用交叉生成:https://www.npmjs.com/package/cross-spawn

win-spawn(来自聊天对话框)不再维护 per the github repo 。如果您有兴趣使用它,请进行以下更改:

  1. npm install 交叉生成
  2. npm install spawn-sync
  3. npm install strongloop (needs to be reinstalled per this link)
  4. 将浏览器同步任务中的“google chrome”更改为 chrome.exe per this link
  5. 运行 gulp

【讨论】:

  • 我将其作为堆栈跟踪 '.' is not recognized as an internal or external command, operable program or batch file.
  • 听起来像是路径问题,请尝试删除 "./" 。在 node_modules 参数中。因此,将其设为“node_modules/.bin/lb-sdk.cmd”。
  • 然后它说 node_modules 不是一个功能,我也有同样的感觉,但我就是无法跨窗口
  • 你不会相信我也遇到了同样的问题
【解决方案2】:

请参考这个类似的答案,这将解决您的问题:

Convert the following npm script to gulp task

How to automate the build from the following configuration using gulp

您可以通过在终端中输入./node_modules/.bin/lb-sdk 来查看lb-sdk 的文档。

【讨论】:

    【解决方案3】:

    你可以在传递server/server.js./client/src/app/shared/sdk 时尝试使用basePath。比如:

    spawn(
      './node_modules/.bin/lb-sdk',
      [
        basePath + '/server/server.js',
        basePath + '/client/src/app/shared/sdk',
        '-q'
      ], {stdio: 'inherit'}
    );
    

    【讨论】:

    • 是的,让我试试,但我已经在使用基本路径,我猜它会参考或应该参考同一点,但会试一试
    • 仍然是同样的错误@Krasimir 我的运气不好,我只是不明白为什么它可以独立工作而不是捆绑任务并且在 linux 中运行良好,顺便说一下 error 一样
    猜你喜欢
    • 1970-01-01
    • 2013-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-04
    • 2015-01-12
    • 2020-06-26
    相关资源
    最近更新 更多