滚动
为自定义主题创建自动化工具 (Gulpjs)
使用自动化工具可以简化主题的开发工作。在这里我们将使用 gulp js 为自定义主题创建一个自动化工具。
适用于 Gulp 3.x 和 Node 10.x 及以下版本
步骤:
1. 安装 Node.js
从 nodejs.org 下载并安装最新版本的 NodeJS。安装过程可能因操作系统不同而有所差异。
2. 安装 Gulp
npm install gulp-cli -g
3. 配置 gulpfile.js
进入自定义主题目录。
手动创建 gulpfile.js,可以使用 cmd/terminal,也可以右键新建文件。
touch gulpfile.js
复制并粘贴以下代码:
注意:我将原始文件放在 'src' 文件夹中,编译后的文件放在自定义主题的根目录下。因此,当 sass 文件从 “my_custom_theme_folder/src/scss” 编译时,它们会被输出到 “my_custom_theme_folder/css” 文件夹中。
var gulp = require('gulp'),
livereload = require('gulp-livereload'),
gulpIf = require('gulp-if'),
eslint = require('gulp-eslint'),
sass = require('gulp-sass'),
autoprefixer = require('gulp-autoprefixer'),
sourcemaps = require('gulp-sourcemaps'),
imagemin = require('gulp-imagemin'),
pngquant = require('imagemin-pngquant');
gulp.task('imagemin', function () {
return gulp.src('./src/images/*')
.pipe(imagemin({
progressive: true,
svgoPlugins: [{removeViewBox: false}],
use: [pngquant()]
}))
.pipe(gulp.dest('./images'));
});
gulp.task('sass', function () {
gulp.src('./src/sass/**/*.scss')
.pipe(sourcemaps.init())
.pipe(sass({outputStyle: 'compressed'}).on('error', sass.logError))
.pipe(autoprefixer('last 2 version'))
.pipe(sourcemaps.write('./'))
.pipe(gulp.dest('./css'));
});
function isFixed(file) {
// 判断 ESLint 是否已修复文件内容
return file.eslint != null && file.eslint.fixed;
}
gulp.task('eslint', function(){
gulp.src(['./src/js/*.js'])
.pipe(eslint({
"extends": "eslint:recommended",
"env": {
"browser": true
},
"globals": {
"Drupal": true,
"drupalSettings": true,
"drupalTranslations": true,
"domready": true,
"jQuery": true,
"_": true,
"matchMedia": true,
"Backbone": true,
"Modernizr": true,
"CKEDITOR": true
},
"rules": {
// 错误规则
"array-bracket-spacing": [2, "never"],
"block-scoped-var": 2,
"brace-style": [2, "stroustrup", {"allowSingleLine": true}],
"comma-dangle": [2, "never"],
"comma-spacing": 2,
"comma-style": [2, "last"],
"computed-property-spacing": [2, "never"],
"curly": [2, "all"],
"eol-last": 2,
"eqeqeq": [2, "smart"],
"guard-for-in": 2,
"indent": [2, 2, {"SwitchCase": 1}],
"key-spacing": [2, {"beforeColon": false, "afterColon": true}],
"linebreak-style": [2, "unix"],
"lines-around-comment": [2, {"beforeBlockComment": true, "afterBlockComment": false}],
"new-parens": 2,
"no-array-constructor": 2,
"no-caller": 2,
"no-catch-shadow": 2,
"no-empty-label": 2,
"no-eval": 2,
"no-extend-native": 2,
"no-extra-bind": 2,
"no-extra-parens": [2, "functions"],
"no-implied-eval": 2,
"no-iterator": 2,
"no-label-var": 2,
"no-labels": 2,
"no-lone-blocks": 2,
"no-loop-func": 2,
"no-multi-spaces": 2,
"no-multi-str": 2,
"no-native-reassign": 2,
"no-nested-ternary": 2,
"no-new-func": 2,
"no-new-object": 2,
"no-new-wrappers": 2,
"no-octal-escape": 2,
"no-process-exit": 2,
"no-proto": 2,
"no-return-assign": 2,
"no-script-url": 2,
"no-sequences": 2,
"no-shadow-restricted-names": 2,
"no-spaced-func": 2,
"no-trailing-spaces": 2,
"no-undef-init": 2,
"no-undefined": 2,
"no-unused-expressions": 2,
"no-unused-vars": [2, {"vars": "all", "args": "none"}],
"no-with": 2,
"object-curly-spacing": [2, "never"],
"one-var": [2, "never"],
"quote-props": [2, "consistent-as-needed"],
"semi": [2, "always"],
"semi-spacing": [2, {"before": false, "after": true}],
"space-after-keywords": [2, "always"],
"space-before-blocks": [2, "always"],
"space-before-function-paren": [2, {"anonymous": "always", "named": "never"}],
"space-in-parens": [2, "never"],
"space-infix-ops": 2,
"space-return-throw-case": 2,
"space-unary-ops": [2, { "words": true, "nonwords": false }],
"spaced-comment": [2, "always"],
"strict": 2,
"yoda": [2, "never"],
// 警告规则
"max-nested-callbacks": [1, 3],
"valid-jsdoc": [1, {
"prefer": {
"returns": "return",
"property": "prop"
},
"requireReturn": false
}]
},
fix: true,
}))
.pipe(eslint.format())
// 如果修复,则写入目标文件
.pipe(gulpIf(isFixed, gulp.dest('./js/')));;
});
gulp.task('watch', function(){
livereload.listen();
gulp.watch('./src/sass/**/*.scss', ['sass']);
gulp.watch('./src/js/**/*.js', ['eslint']);
gulp.watch(['./css/style.css', './**/*.html.twig', './js/*.js'], function (files){
livereload.changed(files)
});
});
4. 配置包管理器
在自定义主题文件夹下输入 npm init 并填写提示信息,生成 package.json。
5. 安装依赖
在自定义主题文件夹下输入 npm install --save-dev <packagename>。这会下载 gulp 及相关依赖,并生成 'node_modules' 文件夹。
6. 从 cmd/terminal 运行自动化工具
现在你可以运行 gulp 自动化工具了。
输入 gulp watch。