使用带有Grunt任务管理器的bash脚本的FTP

时间:2017-07-14 00:23:49

标签: node.js bash ftp gruntjs grunt-exec

我正在尝试使用Grunt将文件从本地分发构建FTP到生产。我已经通过bash文件测试了它的工作原理。我只是无法使用grunt运行它。

在我的grunt文件中:

/*global module:false*/
module.exports = function(grunt) {

    grunt.initConfig( {
        ...
        exec: {
            ftpupload: {
                command: 'ftp.sh'
            }
        }
    } );

    grunt.loadNpmTasks('grunt-exec');
    grunt.registerTask('deploy', ['ftpupload']);
};

我在命令行尝试grunt deploy并收到以下错误:

Warning: Task "ftpupload" not found. Use --force to continue.

我在命令行尝试grunt exec并收到以下错误:

Running "exec:ftpupload" (exec) task
>> /bin/sh: ftp.sh: command not found
>> Exited with code: 127.
>> Error executing child process: Error: Process exited with code 127.
Warning: Task "exec:ftpupload" failed. Use --force to continue.

ftp.sh文件与Gruntfile.js位于同一目录。

如何配置它以便我可以运行grunt deploy并运行bash脚本?

1 个答案:

答案 0 :(得分:0)

以下是一些可供尝试的选项......

选项1

假设grunt-exec允许运行shell脚本( ...它不是我在之前使用过的包!),请按以下方式重新配置Gruntfile.js:< / p>

module.exports = function(grunt) {

    grunt.initConfig( {

        exec: {
            ftpupload: {
                command: './ftp.sh' // 1. prefix the command with ./
            }
        }
    } );

    grunt.loadNpmTasks('grunt-exec');

    // 2. Note the use of the colon notation exec:ftpupload
    grunt.registerTask('deploy', ['exec:ftpupload']);
};

注意

  1. exec.ftpupload.command的更改 - 它现在包含./路径前缀,如您所述:
      

    ftp.sh文件与Gruntfile.js位于同一目录中。

  2. 已注册的deploy任务中的别名任务列表现在使用分号表示法,即exec:ftpupload
  3. 选项2

    如果选项1因任何原因失败,请使用grunt-shell代替 grunt-exec

    1. 运行:$ npm un -D grunt-exec

    2. 卸载 grunt-exec
    3. 运行:$ npm i -D grunt-shell

    4. 安装 grunt-shell
    5. grunt-shell 使用名为load-grunt-tasks的软件包,因此您还需要通过运行来安装它:$ npm i -D load-grunt-tasks

    6. 按如下方式配置Gruntfile.js

    7. module.exports = function(grunt) {
      
          grunt.initConfig( {
      
              shell: {
                  ftpupload: {
                      command: './ftp.sh'
                  }
              }
          });
      
          require('load-grunt-tasks')(grunt);
      
          grunt.registerTask('deploy', ['shell:ftpupload']);
      };