本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
转载自夜明的孤行灯
本文链接地址: https://www.huangyunkun.com/2016/04/25/gulp-inject-start-end-tag/
最近接触了一些前端的东西,在Gulp之下有若干插件,配合起来对于新手而言简直神乎其神,难以理解。
以gulp-inject为例,只需要在页面中添加
<!DOCTYPE html> <html> <head> <title>My index</title> <!-- inject:css --> <!-- endinject --> </head> <body> <!-- inject:js --> <!-- endinject --> </body> </html>
然后配合配置
var gulp = require('gulp'); var inject = require('gulp-inject'); gulp.task('index', function () { var target = gulp.src('./src/index.html'); // It's not necessary to read the files (will speed up things), we're only after their paths: var sources = gulp.src(['./src/**/*.js', './src/**/*.css'], {read: false}); return target.pipe(inject(sources)) .pipe(gulp.dest('./src')); });
就可以自动注入js和css文件。
对于写在html中的那些tag是如何解析的,如果需要自定义怎么办,我很好奇,所以稍微看了一下源代码,gulp-inject真的很小巧(不知道是不是node项目都是这样的)
当传入文件列表之后,会对所有的文件进行分析(主要是文件类型),然后获得startAndEndTags,其中会根据文件后缀获取对应的类型tag
var DEFAULTS = { STARTS: { 'html': '<!-- {{name}}:{{ext}} -->', 'jsx': '{/* {{name}}:{{ext}} */}', 'jade': '//- {{name}}:{{ext}}', 'slm': '/ {{name}}:{{ext}}', 'slim': '/ {{name}}:{{ext}}', 'haml': '-# {{name}}:{{ext}}', 'less': '/* {{name}}:{{ext}} */', 'sass': '/* {{name}}:{{ext}} */', 'scss': '/* {{name}}:{{ext}} */' }, ENDS: { 'html': '<!-- endinject -->', 'jsx': '{/* endinject */}', 'jade': '//- endinject', 'slm': '/ endinject', 'slim': '/ endinject', 'haml': '-# endinject', 'less': '/* endinject */', 'sass': '/* endinject */', 'scss': '/* endinject */' } };
这里是默认的定义,比如html文件中的js和css就是
<!-- inject:js --> <!-- inject:css -->
而结尾是不区分类型的,都是<!-- endinject -->
这也是为什么例子中的tag能够工作的原因。
如果需要自定义tag,只需要在运行的opt中传入即可,具体的在这里
var startTag = opt.tags.start(targetExt, ext, opt.starttag); var endTag = opt.tags.end(targetExt, ext, opt.endtag);
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
转载自夜明的孤行灯
本文链接地址: https://www.huangyunkun.com/2016/04/25/gulp-inject-start-end-tag/