Node.js 从Grunt任务运行项目文件夹中的shell命令

Node.js 从Grunt任务运行项目文件夹中的shell命令,node.js,shell,cordova,gruntjs,Node.js,Shell,Cordova,Gruntjs,我有一个shell命令/node\u modules/cordova/bin/cordova,可以从项目根目录访问该命令 我还有一组Grunt的配置文件,它们位于/config文件夹中 现在,我尝试从任务运行cordova,并希望将其用作别名,因此在GrunFile.js中,我将其设置为: grunt.initConfig({ buildDir: 'build/interim_builds', publishDir: 'build/publish', cordovaCom

我有一个shell命令
/node\u modules/cordova/bin/cordova
,可以从项目根目录访问该命令

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

现在,我尝试从任务运行cordova,并希望将其用作别名,因此在GrunFile.js中,我将其设置为:

grunt.initConfig({
    buildDir: 'build/interim_builds',
    publishDir: 'build/publish',
    cordovaCommand: './node_modules/cordova/bin/cordova',
    ...
mobileApp_create: {
    cmd: '<%= cordovaCommand %> create <%= mobileAppProjectDir %>'
}
})

然后,我从一个任务中运行它,如下所示:

grunt.initConfig({
    buildDir: 'build/interim_builds',
    publishDir: 'build/publish',
    cordovaCommand: './node_modules/cordova/bin/cordova',
    ...
mobileApp_create: {
    cmd: '<%= cordovaCommand %> create <%= mobileAppProjectDir %>'
}

然后我看到这个错误:

“节点_模块”未被识别为内部或外部命令


所以,我想可能是有相对路径的东西,以及Grunt是如何处理它们的?由于我需要使用cordova的本地安装,而不是全局安装,我应该从何处着手解决此问题。

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

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'),

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

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

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'),

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

如果使用完整路径是否有效?如果我使用运行全局安装的cordova(如果可用)的
cordova create
,则有效,但是,如果我以
/node\u modules/cordova/bin/cordova create
的形式运行它,则不起作用。可以尝试改用此选项:。如果使用完整路径,则有效吗?如果使用运行全局安装的cordova的
cordova create
,则有效,但是,如果我以
/node\u modules/cordova/bin/cordova create
的形式运行它,则它不起作用。请尝试改用以下方式:。