使用grunt找不到任务

时间:2015-11-19 19:48:21

标签: javascript node.js gruntjs

我试图在grunt中使用多个任务,其中一个是partialy工作,另一个是not found task的错误。

此问题基于on this one,其中我使用相同的gruntfile.js和相同的结构,即:

├── Gruntfile.js
└── grunt
    ├── config
    │   ├── conf_sass.js
    │   └── conf_home.js
    └── register
        ├── reg_sass.js
        └── reg_home.js

使用以下各个文件:

conf_sass.js

module.exports = function(grunt) {
    grunt.config.set('sass', {

        sass: {
            options: {
                style:'expanded',
                compass: true
            },
            files: {
                'src/css/app.css' : 'src/sass/app.scss'
            }
        },
        cssmin: {
            options: {
                shorthandCompacting: false,
                roundingPrecision: -1
            },
            target: {
                files: {
                    'dist/css/app.min.css': 'src/css/app.css'
                }
            }
        }

    });

    grunt.loadNpmTasks('grunt-contrib-sass');
    grunt.loadNpmTasks('grunt-contrib-cssmin');
};

reg_sass.js

module.exports = function(grunt) {
    grunt.registerTask('compSass', ['sass']);
};

conf_home.js

module.exports = function(grunt) {
    grunt.config.set('home', {

        concat: {
            dist : {
                src: 'src/.../home/*.js',
                dest: 'src/.../concat_home.js'
            }
        },
        ngAnnotate: {
            options: {
                add: true
            },
            dist: {
                files: {
                    'src/.../concat_home.js': 'src/.../concat_home.js'
                }
            }
        },
        uglify: {
            dist: {
                src:  'src/.../concat_home.js',
                dest: 'app/.../home.min.js'
            }
        }

    });

    grunt.loadNpmTasks('grunt-contrib-concat');
    grunt.loadNpmTasks('grunt-contrib-uglify');
    grunt.loadNpmTasks('grunt-ng-annotate');
};

reg_home.js

module.exports = function(grunt) {
    grunt.registerTask('compHome', ['home']);
};

问题是:

sass进程在没有错误的情况下运行所有​​内容,但是没有执行css minify部分,即使没有任何错误。

主页进程,返回错误

  

警告:任务'家庭'找不到

它有什么问题?我安装了所有模块,因为它们在转移到这个新结构之前都在工作。

1 个答案:

答案 0 :(得分:4)

有几个问题:
- 您的文件名必须与您的任务名称相同( E.g Auction.create({ name: "Zaal Hand in Hand", address: { street: "Street Anon", number: 317, box: "AB", postalCode: 9490, city: "Anonty" }, auctionDate: new Date(), finished: true, viewingCode: "", // images: [{}] images: null }); - >任务:ngAnnotate.js
- 您的任务不是由grunt插件分组的 - 共享配置任务和注册任务的名称,然后您无法设置ngAnnotate配置任务和home注册任务,因为当您使用home调用它时,grunt无法了解您所指的任务。

您必须遵守配置任务的这些规则:在一个文件中使用相同插件的组配置任务,不要在配置任务中混用grunt-plugins,注册任务就可用于此作业。

当前配置存在问题,要调用 cssmin 任务,您必须运行grunt home并且没有意义。这就是为什么通过grunt插件对配置任务进行分组,您使用grunt sass:cssmin调用 cssmin 任务或使用grunt cssmin

调用其中的子任务

以下是一个例子:

grunt cssmin:<subtask_name>

我们在这里注册了 sass 配置任务,要运行它,我们使用module.exports = function(grunt) { grunt.config.set('sass', { website: { options: { style:'expanded', compass: true }, files: { 'src/css/app.css' : 'src/sass/app.scss' } }, admin: { options: { style:'expanded', compass: true }, files: { 'src/css/app.css' : 'src/sass/app.scss' } }, }); grunt.loadNpmTasks('grunt-contrib-sass'); }; 。它将在其中运行网站 admin 子任务中的所有子任务。 现在,如果我们只想运行网站任务,我们运行:grunt sass

然后在你的情况下,这是你的结构应该是什么样的:

grunt sass:website

您的├── Gruntfile.js └── grunt ├── config │ ├── sass.js │ ├── concat.js │ ├── cssmin.js │ ├── uglify.js │ └── ngAnnotate.js └── register ├── sassAndCssmin.js └── home.js 文件:

sass.js

您的module.exports = function(grunt) { grunt.config.set('sass', { sass: { options: { style:'expanded', compass: true }, files: { 'src/css/app.css' : 'src/sass/app.scss' } }, }); grunt.loadNpmTasks('grunt-contrib-sass'); }; 文件:

cssmin.js

您的module.exports = function(grunt) { grunt.config.set('cssmin', { cssmin: { options: { shorthandCompacting: false, roundingPrecision: -1 }, target: { files: { 'dist/css/app.min.css': 'src/css/app.css' } } } }); grunt.loadNpmTasks('grunt-contrib-cssmin'); }; 文件:

concat.js

您的module.exports = function(grunt) { grunt.config.set('concat', { home: { dist : { src: 'src/.../home/*.js', dest: 'src/.../concat_home.js' } }, }); grunt.loadNpmTasks('grunt-contrib-concat'); }; 文件:

ngAnnotate.js

其他配置任务的相同过程。

以下是注册任务的示例:

您的module.exports = function(grunt) { grunt.config.set('ngAnnotate', { home: { options: { add: true }, dist: { files: { 'src/.../concat_home.js': 'src/.../concat_home.js' } } }, }); grunt.loadNpmTasks('grunt-ng-annotate'); }; 文件:

sassAndCssmin.js

您的module.exports = function(grunt) { grunt.registerTask('sassAndCssmin', [ 'sass', 'cssmin' ]); }; 文件:

home.js