使用 grunt 找不到任务

Task not found using grunt

我正在尝试在 grunt 中使用多个任务,其中一个正在部分工作,另一个正在收到 not found task.

的错误

这个问题基于 ,我使用相同的 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 缩小部分,即使完全没有错误。

home进程,return出错

Warning: task 'home' not found

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

有几个问题:
- 您的文件名必须与您的任务名称相同(例如ngAnnotate.js -> 任务:ngAnnotate
- 您的任务未按 g运行t 插件
分组 - 配置任务和注册任务的名称是共享的,那么你不能设置一个 home 配置任务和一个 home 注册任务,因为当你用 grunt home 调用它时,g运行t 无法知道您所指的任务。

你必须遵守配置任务的规则:在一个文件中使用相同插件的组配置任务,不要在配置任务中混合 g运行t-plugins,注册这项工作有任务。

您当前配置的问题,要调用 cssmin 任务,您必须 运行 grunt sass:cssmin 并且没有意义。这就是为什么通过 g运行t 插件对配置任务进行分组,您可以使用 grunt cssmin 调用 cssmin 任务或使用 grunt cssmin:<subtask_name>[= 调用其中的子任务34=]

这是一个例子:

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');
};

这里我们注册了sass配置任务,要运行它,我们使用grunt sass。它将 运行 中的所有子任务 websiteadmin 子任务。 现在,如果我们只想 运行 网站任务,我们 运行 : 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 文件:

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