从远程Gruntfile.js加载grunt任务

时间:2016-01-12 10:06:16

标签: javascript node.js gruntjs

在项目的根目录中,我尝试从远程Gruntfile.js加载Grunt任务以及文件的所有内容,可通过网络(Web或内部网络)访问。

我已经尝试了几件事(见下文),首先在本地Apache服务器上托管Gruntfile.js以进行测试。

使用--gruntfile选项

> /project/path> grunt --gruntfile=http://localhost/Gruntfile.js build
Reading "Gruntfile.js" Gruntfile...ERROR
Fatal error: Unable to find "/project/path/http://localhost/Gruntfile.js" Gruntfile.

使用--base选项

> /project/path> grunt --base=http://localhost/Gruntfile.js build
    process.chdir(grunt.option('base') || path.dirname(gruntfile));
Error: ENOENT, no such file or directory

创建位于项目根目录的Gruntfile.js ,其中仅包含以下代码:

module.exports = function (grunt) {

  grunt.loadTasks( 'http://localhost/Gruntfile.js' );

};

结果是:

> /project/path> grunt build
>> Tasks directory "http://localhost/Gruntfile.js" not found.
Warning: Task "build" not found. Use --force to continue.

Aborted due to warnings.

使用Gruntfile.js

的另一次尝试
module.exports = function (grunt) {

  require( 'http://localhost/Gruntfile.js' )( grunt );

};

给我这个:

> /project/path> grunt build
Loading "Gruntfile.js" tasks...ERROR
>> Error: Cannot find module 'http://localhost/Gruntfile.js'
Warning: Task "build" not found. Use --force to continue.

Aborted due to warnings.

编辑:似乎无法从磁盘上没有的grunt文件中加载任务。我会找到另一种解决方案。

2 个答案:

答案 0 :(得分:0)

要求单独的文件应该有效,请注意,不应该通过localhost引用它,而应该引用磁盘上的位置,例如./somedir/yourtask.js。这是一个例子:

<强> yourtask.js

module.exports = {
    // your task config goes here
};

您的 Gruntfile.js

module.exports = function(grunt) {
    var externalFile = require('./somedir/yourtask.js');

    grunt.initConfig({
        // some random tasks go here
        yourtask: externalFile
    });
};

这应该可行,但我现在无法运行它而你还没有发布你在单独文件中定义的信息类型。你也可以在那里有一个功能。

答案 1 :(得分:0)

我遇到了同样的问题,这是我的解决方案。我希望它可以帮助当前/未来的人:

  1. 创建一个npm包来托管Gruntfile.js并将其上传到存储库(我当前正在使用Bitbucket)这就是我的package.json的样子:

    { "name": "my-remote-gruntfile-package", "private": true, "version": "0.0.1" }

  2. 在当前项目的package.json中配置它并使用npm install安装或运行

    npm install git+ssh://git@bitbucket.org:user/my-remote-gruntfile-package.git#0.0.1

  3. 创建一个bash脚本(或等效的windows bash)来解决更改Gruntfile.js位置和设置当前基本路径的问题。这是为了避免在每次执行时传递--gruntfile和--base参数(此步骤不是必需的)

    #!/bin/bash grunt --base ./ --gruntfile ./node_modules/my-remote-gruntfile-package/GruntFile.js $1

  4. 注意:注意Gruntfile.js上使用的相对路径