使用 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
。它将 运行 中的所有子任务 website 和 admin 子任务。
现在,如果我们只想 运行 网站任务,我们 运行 : 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'
]);
};
我正在尝试在 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
。它将 运行 中的所有子任务 website 和 admin 子任务。
现在,如果我们只想 运行 网站任务,我们 运行 : 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'
]);
};