Node.js 获取错误消息";否";concat“;“找到目标”;运行grunt usemin时
我的grunt文件如下所示:Node.js 获取错误消息";否";concat“;“找到目标”;运行grunt usemin时,node.js,debugging,gruntjs,bower,filepath,Node.js,Debugging,Gruntjs,Bower,Filepath,我的grunt文件如下所示: module.exports = function(grunt) { // Project configuration. grunt.initConfig({ pkg: grunt.file.readJSON('package.json'), uglify: { options: { banner: '/*! <%= pkg.name %> <
module.exports = function(grunt) {
// Project configuration.
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
uglify: {
options: {
banner: '/*! <%= pkg.name %> <%= grunt.template.today("yyyy-mm-dd") %> */\n'
},
build: {
src: 'src/**/*.js',
dest: 'dist/<%= pkg.name %>.min.js'
}
},
watch: {
js: {
files: ['src/**/*.js'],
options: {
livereload: '<%= connect.options.livereload %>'
}
},
livereload: {
options: {
livereload: '<%= connect.options.livereload %>'
},
files: [
'src/**/*.html',
'src/**/*.css',
'src/assets/images/{,*/}*.{png,jpg,jpeg,gif,webp,svg}'
]
}
},
connect: {
options: {
port: 9000,
livereload: 35729,
hostname: 'localhost'
},
livereload: {
options: {
open: true,
// base: [
// '.tmp',
// ''
// ]
middleware: function(connect) {
return [
connect.static('.tmp'),
connect().use(
'/bower_components',
connect.static('./bower_components')
),
connect().use(
'/app/styles',
connect.static('./app/styles')
),
connect.static('src')
];
}
}
}
},
copy: {
app: {
cwd: 'src', // set working folder / root to copy
src: '**/*.html', // copy all files and subfolders
dest: 'dist/', // destination folder
expand: true
},
assets: {
cwd: 'src', // set working folder / root to copy
src: 'assets/*', // copy all files and subfolders
dest: 'dist/', // destination folder
expand: true
}
},
useminPrepare: {
options: {
dest: 'dist'
},
html: 'src/index.html'
},
usemin: {
html: ['dist/index.html']
}
});
// Load the plugin that provides the "uglify" task.
// grunt.loadNpmTasks('grunt-contrib-uglify');
grunt.loadNpmTasks('grunt-contrib-connect');
grunt.loadNpmTasks('grunt-contrib-watch');
grunt.loadNpmTasks('grunt-contrib-uglify');
grunt.loadNpmTasks('grunt-contrib-copy');
grunt.loadNpmTasks('grunt-contrib-concat');
grunt.loadNpmTasks('grunt-usemin');
// Default task(s).
grunt.registerTask('default', ['useminPrepare', 'copy', 'concat', 'uglify', 'usemin']);
grunt.registerTask('serve', function(target) {
grunt.task.run([
'connect:livereload',
'watch'
]);
});
};
module.exports=函数(grunt){
//项目配置。
grunt.initConfig({
pkg:grunt.file.readJSON('package.json'),
丑陋的:{
选项:{
横幅:'/*!*/\n'
},
建造:{
src:'src/***.js',
dest:'dist/.min.js'
}
},
观察:{
js:{
文件:['src/**/*.js'],
选项:{
livereload:'
}
},
利弗雷罗德:{
选项:{
livereload:'
},
档案:[
“src/***.html”,
“src/***.css”,
'src/assets/images/{,*/}{png,jpg,jpeg,gif,webp,svg}'
]
}
},
连接:{
选项:{
港口:9000,
利弗雷罗德:35729,
主机名:“localhost”
},
利弗雷罗德:{
选项:{
开放:是的,
//基数:[
//“.tmp”,
// ''
// ]
中间件:功能(连接){
返回[
connect.static('.tmp'),
连接()。使用(
“/bower_组件”,
连接.静态(“./bower_组件”)
),
连接()。使用(
“/app/styles”,
connect.static(“./app/styles”)
),
connect.static('src')
];
}
}
}
},
副本:{
应用程序:{
cwd:'src',//将工作文件夹/根目录设置为复制
src:'***.html',//复制所有文件和子文件夹
dest:'dist/',//目标文件夹
扩展:正确
},
资产:{
cwd:'src',//将工作文件夹/根目录设置为复制
src:'assets/*',//复制所有文件和子文件夹
dest:'dist/',//目标文件夹
扩展:正确
}
},
使用准备:{
选项:{
目的地:“距离”
},
html:'src/index.html'
},
usemin:{
html:['dist/index.html']
}
});
//加载提供“丑”任务的插件。
//grunt.loadNpmTasks(“grunt-contrib-uglify”);
grunt.loadNpmTasks('grunt-contrib-connect');
grunt.loadNpmTasks(“grunt-contrib-watch”);
grunt.loadNpmTasks(“grunt-contrib-uglify”);
grunt.loadNpmTasks('grunt-contrib-copy');
grunt.loadNpmTasks(“grunt-contrib-concat”);
grunt.loadNpmTasks('grunt-usemin');
//默认任务。
registerTask('default',['useminPrepare','copy','concat','uglify','usemin']);
grunt.registerTask('serve',函数(目标){
grunt.task.run([
'连接:livereload',
“注意”
]);
});
};
当我运行grunt时,获取错误消息为“No”concat“targets found”。
我已经尝试了2个小时来解决这个问题,但没有结果,请帮助我找到解决方案。太晚了,但只是为了防止它对其他人有用:我相信useminprepare将自动生成concat配置并将其提供给grunt任务运行程序,所以我认为上面的回答不太准确 我将尝试查看src/index.html中的构建块,并检查路径是否正确指向useminPrepare将连接的资源。我现在正与这样一个问题作斗争:S
此处参考:使用以下过程进行调试:
- 运行
- 指定
存储位置(temp
或temp
)目录staging
- 在运行
之前,确保usemin
或temp
目录不为空staging
- 如果为空,则运行
任务,该任务将grunt copy
或temp
目录设置为staging
参数dest
useminPrepare
,目录需要指示为处理器管道输出正确配置所需的输入、瞬态和输出路径,而对于usemin
,目录只反映输出路径,因为所有需要的资产都应该输出到目标目录(转换或刚刚复制)
参考资料