之前写过一篇gulp的使用文章一篇迟到的gulp文章,代码合并压缩,less编译

最近有在用gulp,使用到一个gulp-nunjucks-render插件,感觉挺方便的

gulp-nunjucks-render 用来渲染Nunjucks templates

安装

npm install --save-dev gulp-nunjucks-render

使用

var env = process.env.NODE_ENV;
var ver = require('./package.json').version; var normalUrl = {
'dev': 'http://www.t.xxx.com',
'test': 'http://www.t.xxx.com',
'pre': 'http://www.pre.xxx.com',
'prod': 'https://www.xxx.com',
}; return gulp.src([src + 'pages/**/*.html'])
.pipe(nunjucksRender({
path: [src], // String or Array
manageEnv: manageEnvironment,
data: {
wwwUrl: normalUrl[env]
}
}))
.pipe(gulp.dest(dist))
.pipe(connect.reload());

1、使用data作为一个选项

 nunjucksRender({data: {
css_path: 'http://company.com/css/'
}});
<link rel="stylesheet" href="{{ css_path }}test.css" />

编译之后

<link rel="stylesheet" href="http://company.com/css/test.css" />

2、manageEnv用来在编译之前添加filters、globals

var manageEnvironment = function(environment) {
environment.addFilter('getAssetsUrl', function(filename) {
const extname = filename.split('.').pop();
const revJsonFile = path.join(path.dirname(__filename) + '/' + dist, 'public/' + extname + '/rev-manifest.json');
if (fs.existsSync(revJsonFile)) {
const hashMapJson = fs.readFileSync(revJsonFile);
const hashMap = JSON.parse(hashMapJson);
return `${host}/${extname}/${hashMap[filename]}`;
}
}); environment.addFilter('getLibUrl', function(filename) {
return `${host}/lib/${filename}`;
}) environment.addFilter('getVendorUrl', function(filename) {
return `${host}/vendor/${filename}`;
}) environment.addFilter('getImgUrl', function(filename) {
return `https://xxx.xxx.com/www/${imgVer}/pc/img/${filename}`;
}) var newenv = {
'dev': 'development',
'test':'testing',
'pre':'pre',
'prod':'production'
}
environment.addGlobal('env', newenv[env]);
let baseUrl = 'https://www.xxxx.com';
environment.addGlobal('baseUrl', baseUrl);
}; 将manageEnvironment添加到manageEnv中 return gulp.src([src + 'pages/**/*.html'])
.pipe(nunjucksRender({
manageEnv: manageEnvironment,
}));

这样在html文件中,通过{{ env }}这种形式拿到全局变量值

<script src="{{ 'nprogress.js' | getVendorUrl }}"></script>

// config
define('config', function () {
return {
env: '{{ env }}',
baseUrl: '{{ baseUrl }}'
};
});

另外,之前一直在用gulp3,今天对gulp4也简单了解了下

gulp4的任务执行

1、在gulp3中,task任务一般都是并行执行,如果需要同步执行需要另外使用插件 run-sequence

2、gulp4中,提供了gulp.series和gulp.parallel任务执行方式

gulp.series 用于串行(顺序)执行

gulp.parallel 用于并行执行

串行、并行执行

const task = gulp.series(clean, gulp.series(copy, js, css), gulp.parallel(html));

function watch(done) {
gulp.watch('src/**/*.*', task);
done();
} /* m end */ var build = gulp.series(clean, task); var dev = gulp.series(build, gulp.parallel(watch, serve)); exports.dev = dev;
exports.build = build;

执行命令

gulp dev
gulp build

参考阅读

走进gulp4的世界

Gulp 4: gulp.parallel gulp.series -- 全新的任务执行体系

gulp插件gulp-nunjucks-render的使用及gulp4的简单了解的更多相关文章

  1. 利用gulp 插件gulp.spritesmith 完成小图合成精灵图,并自动输出样式文件

    安装依赖 yarn add gulp yarn add gulp.spritesmith 本次依赖的版本是: "gulp": "^3.9.1" "gu ...

  2. 常用 Gulp 插件汇总 —— 基于 Gulp 的前端集成解决方案(三)

    前两篇文章讨论了 Gulp 的安装部署及基本概念,借助于 Gulp 强大的 插件生态 可以完成很多常见的和不常见的任务.本文主要汇总常用的 Gulp 插件及其基本使用,需要读者对 Gulp 有一个基本 ...

  3. gulp 插件

    原文链接:http://www.mamicode.com/info-detail-517085.html gulp是什么? http://gulpjs.com/ 相信你会明白的! 与著名的构建工具gr ...

  4. gulp插件gulp-ruby-sass和livereload插件

    gulp-ruby-sass是gulp的一个插件,主要是用来实现sass编译,livereload插件主要是实现文件保存时浏览器自动刷新,避免了手动f5的频繁的操作 准备工作:chrome浏览器安装l ...

  5. gulp插件autoprefixer

    gulp的autoprefixer插件可以根据我们的设置帮助我们自动补全浏览器的前缀(如:-moz.-ms.-webkit.-o) 1)首先安装gulp,不知道怎么安装请看这里 2)安装autopre ...

  6. gulp插件(gulp-jmbuild),用于WEB前端构建

    源码地址:https://github.com/jiamao/gulp-jmbuild https://github.com/jiamao/gulp-jmbuild gulp-jmbuild gulp ...

  7. gulp插件gulp-usemin简单使用

    关于什么是gulp,它和grunt有什么区别等问题,这里不做任何介绍.本文主要介绍如何使用gulp-usemin这款插件,同时也会简单介绍本文中用到的一些插件. 什么是gulp-usemin 用来将H ...

  8. 使用gulp插件来自动刷新页面。

    http://itakeo.com/blog/2016/05/19/gulpreload/?none=123 使用gulp插件来自动刷新页面.再也不用修改一次,按一下F5了. 首选通过npm inst ...

  9. 将less编译成css的gulp插件

    简介:gulp是前端开发过程中对代码进行构建的工具,是自动化项目的构建利器:她不仅能对网站资源进行优化,而且在开发过程中很多重复的任务能够使用正确的工具自动完成:使用她,我们不仅可以很愉快的编写代码, ...

随机推荐

  1. using Sysyem.Net.Http命名空间引用不了的解决方案

    1.查看.Net Framework的框架是否是在4.5之上,如果不是要下载4.5之上的目标框架. 2.在引用器里面添加using System.Net.Http命名空间 选择项目列表中的“引用”-- ...

  2. web项目部署到服务器中浏览器中显示乱码

    项目部署之后浏览器打开查看时页面乱码 这里可能需要修改一下tomcat配置文件,首先找到Tomcat的安装路径下的conf/server.xml文件,找到之后可以CTRL+F搜索如下的内容: < ...

  3. Java中死锁的定位与修复

    死锁应该可以说是并发编程中比较常见的一种情况,可以说如果程序产生了死锁那将会对程序带来致命的影响:所以排查定位.修复死锁至关重要: 我们都知道死锁是由于多个对象或多个线程之间相互需要对方锁持有的锁而又 ...

  4. SpringCloud 在Feign上使用Hystrix(断路由)

    SpringCloud  在Feign上使用Hystrix(断路由) 第一步:由于Feign的起步依赖中已经引入了Hystrix的依赖,所以只需要开启Hystrix的功能,在properties文件中 ...

  5. promise的理解

    为什么会有promise,他的作用是什么? promise主要是为了解决js中多个异步回调难以维护和控制的问题. 什么是promise? 从图中,我们可以看出,Promise是一个函数,这个函数上有在 ...

  6. 让webstorm里提示nodejs智能补全

    webstorm里是默认没有nodejs只能提示的, 比如,输入requ到现在还不提示出require这个函数名,非常不方便. 设置方式: file  --> setting -->edi ...

  7. 微信小程序如何发送短信验证码,无需搭建服务器

    自从微信小程序提供云开发支持,开发者无需搭建后台服务器,使用微信提供的核心API就可以实现应用功能,此时就需要小程序能够自己发送短信,比如短信验证码,榛子云短信(http://smsow.zhenzi ...

  8. Puppeteer 应用容器化

    Puppeteer 应用容器化 Intro Puppeteer是谷歌官方出品的一个通过DevTools协议控制headless Chrome的Node库.可以通过Puppeteer的提供的api直接控 ...

  9. 企业IT管理员IE11升级指南【14】—— IE11代理服务器配置

    企业IT管理员IE11升级指南 系列: [1]—— Internet Explorer 11增强保护模式 (EPM) 介绍 [2]—— Internet Explorer 11 对Adobe Flas ...

  10. JS关于Date函数的格式化输出

    // 对Date的扩展,将 Date 转化为指定格式的String // 月(M).日(d).小时(h).分(m).秒(s).季度(q) 可以用 1-2 个占位符, // 年(y)可以用 1-4 个占 ...