grunt 任务的问题
problems with grunt tasks
我的 package.json 是:
{
"name": "pink",
"version": "0.1.0",
"private": true,
"description": "Личный проект «Пинк» от HTML Academy",
"devDependencies": {
"@htmlacademy/editorconfig-cli": "0.1.x",
"autoprefixer": "^6.7.7",
"grunt": "^1.0.1",
"grunt-browser-sync": "2.2.0",
"grunt-contrib-imagemin": "^1.0.1",
"grunt-contrib-less": "^1.4.0",
"grunt-contrib-watch": "1.0.0",
"grunt-css-mqpacker": "^3.0.1",
"grunt-postcss": "0.8.0",
"grunt-svgmin": "^4.0.0",
"grunt-svgstore": "^1.0.0",
"load-grunt-tasks": "^3.5.2",
"postcss-csso": "^2.0.0"
},
"scripts": {
"test": "editorconfig-cli",
"build": "grunt less && grunt postcss",
"start": "npm run build && grunt serve"
},
"editorconfig-cli": [
"*.html",
"*.json",
"*.js",
"js/**/*.js",
"img/**/*.svg",
"less/**/*.less"
],
"engines": {
"node": "6.7"
}
}
Gruntfile.js 是:
"use strict";
module.exports = function(grunt) {
require("load-grunt-tasks")(grunt);
grunt.initConfig({
less: {
style: {
files: {
"css/style.css": "less/style.less"
}
}
},
postcss: {
style: {
options: {
processors: [
require("autoprefixer")({browsers: [
"last 1 versions",
"last 2 Chrome versions",
"last 2 Firefox versions",
"last 2 Opera versions",
"last 2 Edge versions",
]}),
]
},
src: "css/*.css"
}
},
browserSync: {
server: {
bsFiles: {
src: [
"*.html",
"css/*.css"
]
},
options: {
server: ".",
watchTask: true,
notify: false,
open: true,
cors: true,
ui: false
}
}
},
watch: {
style: {
files: ["less/**/*.less"],
tasks: ["less", "postcss"]
}
}
});
grunt.registerTask("serve", ["browserSync", "watch"]);
};
所有 Grunt 任务运行良好。
我添加了一个新的 grunt 插件,例如 imagemin (https://www.npmjs.com/package/grunt-contrib-imagemin)。
我更新后的 Gruntfile.js 看起来像这样:
"use strict";
module.exports = function(grunt) {
require("load-grunt-tasks")(grunt);
grunt.initConfig({
less: {
style: {
files: {
"css/style.css": "less/style.less"
}
}
},
postcss: {
style: {
options: {
processors: [
require("autoprefixer")({browsers: [
"last 1 versions",
"last 2 Chrome versions",
"last 2 Firefox versions",
"last 2 Opera versions",
"last 2 Edge versions",
]}),
]
},
src: "css/*.css"
}
},
// Configuration for imagemin-task
imagemin: {
dynamic: {
options: {
optimizationLevel: 3
},
files: [{
expand: true,
cwd: "src/",
src: ["images/**/*.{png,jpg,gif}"],
dest: "img/"
}]
}
}
browserSync: {
server: {
bsFiles: {
src: [
"*.html",
"css/*.css"
]
},
options: {
server: ".",
watchTask: true,
notify: false,
open: true,
cors: true,
ui: false
}
}
},
watch: {
style: {
files: ["less/**/*.less"],
tasks: ["less", "postcss"]
}
}
});
// Here is registerTask
grunt.registerTask("default", ["imagemin"]);
grunt.registerTask("serve", ["browserSync", "watch"]);
};
添加后,任务不再有效。
终端显示以下错误:
Loading "Gruntfile.js" tasks...ERROR
SyntaxError: Unexpected identifier Warning: Task "less" not found. Use --force to continue.
由于警告而中止。
bash: --force: 找不到命令
所有任务都出现相同的错误(例如,grunt less
,在最后一次添加之前工作正常)。
怎么了?请帮助我。
添加逗号和新插件后 initConfig 如下:
grunt.initConfig({
less: {
style: {
files: {
"css/style.css": "less/style.less"
}
}
},
postcss: {
style: {
options: {
processors: [
require("autoprefixer")({browsers: [
"last 1 versions",
"last 2 Chrome versions",
"last 2 Firefox versions",
"last 2 Opera versions",
"last 2 Edge versions",
]}),
]
},
src: "css/*.css"
}
},
csso: {
style: {
options: {
report: "gzip"
},
files: {
"css/style.min.css": "css/style.css"
}
}
},
imagemin: {
images: {
options: {
optimizationLevel: 3
},
files: [{
expand: true,
cwd: "src/",
src: ["images/**/*.{png,jpg,gif}"],
dest: "img/"
}]
}
},
svgstore: {
options: {
svg: {
style: "display: none"
}
}
symbols: {
files: {
"images/symbols.svg": "images/icons/*.svg"
}
}
},
svgmin: {
symbols: {
files: [{
expand: true,
src: ["images/icons/*.svg"]
}]
}
},
browserSync: {
server: {
bsFiles: {
src: [
"*.html",
"css/*.css"
]
},
options: {
server: ".",
watchTask: true,
notify: false,
open: true,
cors: true,
ui: false
}
}
},
watch: {
style: {
files: ["less/**/*.less"],
tasks: ["less", "postcss"]
}
}
});
但是我又犯了同样的错误
您在(新添加的)imagemin
块后缺少一个逗号:
imagemin: {
// ...
} // <- right here
browserSync: {
// ...
我的 package.json 是:
{
"name": "pink",
"version": "0.1.0",
"private": true,
"description": "Личный проект «Пинк» от HTML Academy",
"devDependencies": {
"@htmlacademy/editorconfig-cli": "0.1.x",
"autoprefixer": "^6.7.7",
"grunt": "^1.0.1",
"grunt-browser-sync": "2.2.0",
"grunt-contrib-imagemin": "^1.0.1",
"grunt-contrib-less": "^1.4.0",
"grunt-contrib-watch": "1.0.0",
"grunt-css-mqpacker": "^3.0.1",
"grunt-postcss": "0.8.0",
"grunt-svgmin": "^4.0.0",
"grunt-svgstore": "^1.0.0",
"load-grunt-tasks": "^3.5.2",
"postcss-csso": "^2.0.0"
},
"scripts": {
"test": "editorconfig-cli",
"build": "grunt less && grunt postcss",
"start": "npm run build && grunt serve"
},
"editorconfig-cli": [
"*.html",
"*.json",
"*.js",
"js/**/*.js",
"img/**/*.svg",
"less/**/*.less"
],
"engines": {
"node": "6.7"
}
}
Gruntfile.js 是:
"use strict";
module.exports = function(grunt) {
require("load-grunt-tasks")(grunt);
grunt.initConfig({
less: {
style: {
files: {
"css/style.css": "less/style.less"
}
}
},
postcss: {
style: {
options: {
processors: [
require("autoprefixer")({browsers: [
"last 1 versions",
"last 2 Chrome versions",
"last 2 Firefox versions",
"last 2 Opera versions",
"last 2 Edge versions",
]}),
]
},
src: "css/*.css"
}
},
browserSync: {
server: {
bsFiles: {
src: [
"*.html",
"css/*.css"
]
},
options: {
server: ".",
watchTask: true,
notify: false,
open: true,
cors: true,
ui: false
}
}
},
watch: {
style: {
files: ["less/**/*.less"],
tasks: ["less", "postcss"]
}
}
});
grunt.registerTask("serve", ["browserSync", "watch"]);
};
所有 Grunt 任务运行良好。
我添加了一个新的 grunt 插件,例如 imagemin (https://www.npmjs.com/package/grunt-contrib-imagemin)。
我更新后的 Gruntfile.js 看起来像这样:
"use strict";
module.exports = function(grunt) {
require("load-grunt-tasks")(grunt);
grunt.initConfig({
less: {
style: {
files: {
"css/style.css": "less/style.less"
}
}
},
postcss: {
style: {
options: {
processors: [
require("autoprefixer")({browsers: [
"last 1 versions",
"last 2 Chrome versions",
"last 2 Firefox versions",
"last 2 Opera versions",
"last 2 Edge versions",
]}),
]
},
src: "css/*.css"
}
},
// Configuration for imagemin-task
imagemin: {
dynamic: {
options: {
optimizationLevel: 3
},
files: [{
expand: true,
cwd: "src/",
src: ["images/**/*.{png,jpg,gif}"],
dest: "img/"
}]
}
}
browserSync: {
server: {
bsFiles: {
src: [
"*.html",
"css/*.css"
]
},
options: {
server: ".",
watchTask: true,
notify: false,
open: true,
cors: true,
ui: false
}
}
},
watch: {
style: {
files: ["less/**/*.less"],
tasks: ["less", "postcss"]
}
}
});
// Here is registerTask
grunt.registerTask("default", ["imagemin"]);
grunt.registerTask("serve", ["browserSync", "watch"]);
};
添加后,任务不再有效。
终端显示以下错误:
Loading "Gruntfile.js" tasks...ERROR
SyntaxError: Unexpected identifier Warning: Task "less" not found. Use --force to continue.
由于警告而中止。
bash: --force: 找不到命令
所有任务都出现相同的错误(例如,grunt less
,在最后一次添加之前工作正常)。
怎么了?请帮助我。
添加逗号和新插件后 initConfig 如下:
grunt.initConfig({
less: {
style: {
files: {
"css/style.css": "less/style.less"
}
}
},
postcss: {
style: {
options: {
processors: [
require("autoprefixer")({browsers: [
"last 1 versions",
"last 2 Chrome versions",
"last 2 Firefox versions",
"last 2 Opera versions",
"last 2 Edge versions",
]}),
]
},
src: "css/*.css"
}
},
csso: {
style: {
options: {
report: "gzip"
},
files: {
"css/style.min.css": "css/style.css"
}
}
},
imagemin: {
images: {
options: {
optimizationLevel: 3
},
files: [{
expand: true,
cwd: "src/",
src: ["images/**/*.{png,jpg,gif}"],
dest: "img/"
}]
}
},
svgstore: {
options: {
svg: {
style: "display: none"
}
}
symbols: {
files: {
"images/symbols.svg": "images/icons/*.svg"
}
}
},
svgmin: {
symbols: {
files: [{
expand: true,
src: ["images/icons/*.svg"]
}]
}
},
browserSync: {
server: {
bsFiles: {
src: [
"*.html",
"css/*.css"
]
},
options: {
server: ".",
watchTask: true,
notify: false,
open: true,
cors: true,
ui: false
}
}
},
watch: {
style: {
files: ["less/**/*.less"],
tasks: ["less", "postcss"]
}
}
});
但是我又犯了同样的错误
您在(新添加的)imagemin
块后缺少一个逗号:
imagemin: {
// ...
} // <- right here
browserSync: {
// ...