【问题标题】:Run a shell command that is inside a project folder from Grunt task从 Grunt 任务运行项目文件夹中的 shell 命令
【发布时间】:2016-07-29 08:08:58
【问题描述】:

我有一个 shell 命令./node_modules/cordova/bin/cordova,可以从项目根目录访问。

我还有一组用于 Grunt 的配置文件,它们位于 ./config 文件夹中。

现在我正在尝试从任务中运行 cordova 并希望将其用作别名,所以在 Gruntfile.js 中我有这样的:

grunt.initConfig({
    buildDir: 'build/interim_builds',
    publishDir: 'build/publish',
    cordovaCommand: './node_modules/cordova/bin/cordova',
    ...

})

然后,我从一个任务中运行它:

mobileApp_create: {
    cmd: '<%= cordovaCommand %> create <%= mobileAppProjectDir %>'
}

结果我得到这个错误:

'.'未被识别为内部或外部命令,

如果我替换

cordovaCommand: './node_modules/cordova/bin/cordova'

cordovaCommand: 'node_modules/cordova/bin/cordova'

然后我看到这个错误:

'node_modules' 未被识别为内部或外部命令,

所以,我想它可能是具有相对路径的东西,以及 Grunt 如何与它们一起工作?我需要在哪里解决这个问题,因为我需要使用本地安装的cordova,而不是全局安装。

【问题讨论】:

  • 如果你使用完整路径,它可以工作吗?
  • 如果我使用cordova create &lt;%= mobileAppProjectDir %&gt; 可以运行全局安装的cordova(如果可用),但如果我以./node_modules/cordova/bin/cordova create &lt;%= mobileAppProjectDir %&gt; 运行它则不起作用
  • 也许可以试试这个:github.com/csantanapr/grunt-cordovacli.

标签: node.js shell cordova gruntjs


【解决方案1】:

您可以尝试在运行时完全解析路径,这样就没有相对路径:

var path = require('path');

module.exports = function(grunt) {

  grunt.initConfig({
    buildDir: 'build/interim_builds',
    publishDir: 'build/publish',
    cordovaCommand: path.resolve('./node_modules/cordova/bin/cordova'),

    // ...
  });
  // ...
};

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-14
    • 1970-01-01
    • 2013-02-23
    • 2015-07-28
    • 1970-01-01
    • 2014-02-17
    • 2016-05-24
    相关资源
    最近更新 更多