gulp打包脚本
var gulp = require('gulp'); var gutil = require('gulp-util'); var chalk = require('chalk'); var fs = require('fs'); var _ = require('underscore'); var path = require('path'); var amdOptimize = require("amd-optimize"); var concat = require('gulp-concat'); var rimraf = require('gulp-rimraf'); var uglify = require('gulp-uglify'); var through2 = require("through2"); var ejs = require("gulp-ejs"); var less = require('gulp-less'); var minifyCSS = require('gulp-minify-css'); var runSequence = require('run-sequence'); // var imagemin = require('gulp-imagemin'); var zip = require('gulp-zip'); var shell = require('child_process'); var pkg = require('./package.json'); var merge = require("merge-stream"); var BUILD_TIMESTAMP = gutil.date(new Date(), "yyyymmddHHMMss"); var Utils = require("./gulputil/utils"); var htmlmin = require('gulp-htmlmin'); var Config = require("./gulputil/gulp.config")(); //获取时间戳 pkg.build = BUILD_TIMESTAMP; // 设置默认工作目录 process.chdir(Config.workDir); // 获取管道env参数 var argv = process.argv.slice(2); //检查环境变量参数 var env = Config.checkEnv(argv); //设置根目录 var CONTEXT_PATH = Config.CONTEXT_PATH; //设置环境变量 var nativeApi = Config.nativeApi; var handleEnv = Config.handleEnv(); /* * 清空目标工程目录 */ gulp.task('clean', function() { return gulp.src(Config.clean_src, { read: false }) .pipe(rimraf({ force: true })); }); /* * 拷贝文件到目标工程目录 */ gulp.task('copy', function() { return gulp.src(Config.copy_src) .pipe(handleEnv()) .pipe(gulp.dest(Config.dest)); }); /* * 拷贝源文件文件到目标工程目录 */ gulp.task('source', function() { return gulp.src(Config.source_src) .pipe(gulp.dest(Config.source_dest)); }); /* * 编译ejs页面 */ gulp.task("ejs", function() { return gulp.src(Config.ejs_src) .pipe(ejs({ ctx: CONTEXT_PATH, _build: { pkg: pkg, version: pkg.version, ts: BUILD_TIMESTAMP, env: env, nativeApi: nativeApi }, Utils: new Utils(env), _: _, data: {}, delimiter: "@" }, { root: __dirname + "/templates" })) .pipe(htmlmin({collapseWhitespace: true})) .pipe(gulp.dest(Config.ejs_dest)); }) /* * 编译less */ gulp.task('less', function() { return gulp.src(Config.less_src) .pipe(less({ Config: [path.join(__dirname, 'less', 'includes')] })) .pipe(minifyCSS()) .pipe(gulp.dest(Config.less_dest)); }); /* * 编译压缩css */ gulp.task('minifycss', function() { return gulp.src(Config.minifycss_src) .pipe(minifyCSS()) .pipe(gulp.dest(Config.minifycss_dest)); }); // /* // * 图片压缩 // */ // gulp.task("imagemin",function(){ // return gulp.src(Config.src+'/images/*') // .pipe(imagemin({ // progressive: true, // optimizationLevel:3, // svgoPlugins: [{removeViewBox: false}] // })) // .pipe(gulp.dest(Config.dest+'/images')); // }) /* * 编译压缩js */ gulp.task('uglifyjs', function() { return gulp.src(Config.uglifyjs_src) .pipe(handleEnv()) .pipe(uglify({ // output: { // max_line_len: 120 // } }).on("error", gutil.log)) .pipe(gulp.dest(Config.uglifyjs_dest)); }); // /* // * 编译压缩js // */ // gulp.task('concat_modules', function() { // var files = fs.readdirSync(Config.concat_modules_src); // var dirs = []; // var sequence = []; // _.each(files, function(fn) { // var fname = Config.concat_modules_src + "/"+fn; // var stat = fs.lstatSync(fname); // if (stat.isDirectory() == true) { // dirs.push(fname) // } // sequence.push( // gulp.src(fname+"/**/*.js") // .pipe(concat("main.js")) // .pipe(gulp.dest(Config.concat_modules_dest+"/"+fn)) // ) // }) // return merge.apply(this,sequence); // // return gulp.src(Config.uglifyjs_src) // // .pipe(concat({ // // output: { // // max_line_len: 120 // // } // // }).on("error", gutil.log)) // // .pipe(gulp.dest(Config.uglifyjs_dest)); // }); /* * require js 优化 */ gulp.task("js_optimize", function() { var sequence = []; sequence.push( // 优化common gulp.src(Config.src + "/js/**/*.js") .pipe(amdOptimize("C", { configFile: Config.src + "/lib/require-config.js", paths: Config.exclude })) .pipe(handleEnv()) // 合并 .pipe(concat("common.js")) // .pipe(uglify().on("error", gutil.log)) // 输出 .pipe(gulp.dest(Config.dest + "/js/common")) ); var files = fs.readdirSync(Config.concat_modules_src); var dirs = []; var sequence = []; _.each(files, function(fn) { var fname = Config.concat_modules_src + "/" + fn; var stat = fs.lstatSync(fname); if (stat.isDirectory() == true) { if (fs.existsSync(Config.src + "/modules/" + fn + "/index.js")) { sequence.push( // 优化common gulp.src(Config.src + "/modules/**/*.js") .pipe(amdOptimize("modules/" + fn + "/index", { configFile: Config.src + "/lib/require-config.js", paths: Config.exclude })) .pipe(handleEnv()) // 合并 .pipe(concat("index.js")) // .pipe(uglify().on("error", gutil.log)) // 输出 .pipe(gulp.dest(Config.concat_modules_dest + "/" + fn)) ) } } }) return merge.apply(this, sequence); }); /* * 打包zip */ gulp.task('archive', function() { return gulp.src(Config.archive_src) .pipe(zip(pkg.name + "_v_" + pkg.version.replace(/\./g, "_") + "_" + env.toLowerCase() + "_" + BUILD_TIMESTAMP + '.zip')) .pipe(gulp.dest(Config.output)); }); // gulp.task('archive', function () { // return gulp.src('src/*') // .pipe(zip('archive.zip')) // .pipe(gulp.dest('dist')); // }); /* * 部署到测试环境 */ gulp.task('deploy', function() { }); gulp.task('clean_patch', function() { return gulp.src(Config.clean_patch, { read: false }) .pipe(rimraf({ force: true })); }); /* * 拷贝文件到目标工程目录 */ gulp.task('copy_patch', function() { var filelist = fs.readFileSync("../patchlist.txt","UTF-8"); filelist = filelist.replace(/\r/g,""); var list = filelist.split("\n"); var rs = []; var obj = {}; _.each(list,function(item){ if(/^modules/.test(item)){ var items = item.split("/"); item = [items[0],items[1],"**/*"].join("/"); } obj[item]=true; }) for(var key in obj){ console.log(key); rs.push(key); } rs.push("js/version.js"); return gulp.src(rs,{cwd:Config.dest,base:Config.dest}) .pipe(gulp.dest(Config.patch)); }); /* * 开始构建 */ gulp.task('patch', function (callback) { runSequence( "clean_patch", "copy_patch", function (error) { if (error) { console.log(error.message); } else { console.log('RELEASE FINISHED SUCCESSFULLY'); } callback(error); }); }); /* * 清空output目录 */ gulp.task('clean_output', function() { return gulp.src(Config.output, { read: false }) .pipe(rimraf({ force: true })); }); /* * 把dist拷贝到output目录下 */ gulp.task('copy_output', function() { return gulp.src(Config.dest+"/**/*",{cwd:Config.dest,base:Config.dest}) .pipe(gulp.dest(Config.output+"/"+env.toLowerCase())); }); /* * 打包zip */ gulp.task('archive_output', function() { return gulp.src(Config.output+"/**/*") .pipe(zip('output.zip')) .pipe(gulp.dest(Config.output)); }); /* * 开始构建 */ gulp.task('build', function(callback) { runSequence( "clean", 'less', "copy", 'ejs', 'source', 'js_optimize',//这个运行时需要10几分钟,暂时注释掉 'uglifyjs', // 'minifycss', // 'archive', function(error) { if (error) { console.log(error.message); } else { console.log('RELEASE FINISHED SUCCESSFULLY'); } callback(error); }); }); /* * 监听less */ gulp.task('watchless', function() { return gulp.watch(Config.src + "/less/**/*.less",function(event){ console.log(event.path); gulp.start(["less"]); }); }); /* * 监听js */ gulp.task("watchjs",function(){ return gulp.watch(Config.src + "/**/*.js",function(event){ console.log(event.path); gulp.start(["js_optimize","uglifyjs"]); }); }); /* * 监听ejs */ gulp.task("watchejs",function(){ return gulp.watch(Config.templates + "/**/*.ejs",function(event){ console.log(event.path); gulp.start(["ejs"]); }); }); /* * watch监听 js javascript ejs */ gulp.task('watch', function (callback){ runSequence( "watchless", "watchjs", "watchejs", function(error) { if (error) { console.log(error.message); } else { console.log('RELEASE FINISHED SUCCESSFULLY'); } callback(error); }); }); /* * 编译build,然后watch */ gulp.task('default', function (callback){ runSequence( "build", "watch", function(error) { if (error) { console.log(error.message); } else { console.log('RELEASE FINISHED SUCCESSFULLY'); } callback(error); }); });
相关推荐
本篇将详细探讨"gulp-build:自我吞噬"这一主题,以及如何利用JavaScript中的gulp-git进行版本控制操作。 `gulp-build`通常指的是基于`Gulp.js`构建系统的一个特定实现或者工作流。Gulp是一个基于流的构建工具,它...
随着技术的不断发展,各种构建工具如Grunt、Gulp、Webpack等应运而生,帮助开发者自动化这些任务。本教程重点介绍的是使用Gulp,一个基于Node.js的流构建系统,来提升前端开发的效率和质量。 **Gulp简介** Gulp是一...
By the end of this book, you will be able to create your very own gulp build from scratch, create and maintain tasks and project builds, and automate your workflow with plugins and custom tasks. ...
通过执行`gulp build`命令,这个任务就会监听`src/main.js`及其依赖的改变,并在有变动时重新构建。`transform`参数允许我们指定额外的转换插件,例如`babelify`用于转换ES6+语法。 总的来说,gulp-bro是提升前端...
【标题】"demo_gulp_build"是一个展示如何使用Gulp构建React应用的项目,它将React、ES6、Less等现代前端技术与Gulp工作流相结合,以实现更高效的开发和构建过程。该项目旨在简化前端开发环境的配置,提供一个快速...
- `$ gulp builddev` 打包并部署到开发环境。 - `$ gulp buildpro` 打包并部署到生产环境。 总的来说,"markting_web"项目通过Jenkins自动化构建,实现了前端开发流程的高效化,确保了代码质量,并且具有良好的扩展...
大口构建 用于观察和处理 sass 和 javascript 的简单 gulp 构建脚本 使用: 确保你有一个包含所有依赖项的 package.json 运行: npm install 安装所有依赖项 利润
gulp build 或者 npm run build 后端启动: node server 数据库: 根据server/setting.js 的配置连上数据库 node manager.js 生成数据库 项目细节 后端使用工作时搭建的node服务器,基于koa内核,采用koa-...
Gulp-Build-Example 是一个展示如何使用 Gulp 进行项目构建的实例。通过学习这个示例,开发者可以了解如何设置和运行基本的构建任务,如 CSS 预处理器(如 Sass)的使用,JavaScript 的压缩与合并,以及如何自定义...
完成开发后,可以使用特定的gulp任务(如`gulp build`)来生成最终的发布版本。 6. **最佳实践**: 在使用此项目模板时,开发者应遵循良好的前端开发规范,如模块化代码、注释清晰、遵循编码风格指南,以及利用git...
**gulp-cmd-build** 是一个基于 **Gulp** 的构建工具,专为处理 **Cmd**(Sea.js)模块而设计。在前端开发中,构建工具是必不可少的,它们能够自动化处理资源编译、合并、压缩等任务,提高开发效率并优化生产环境的...
使用说明:npm install// 安装依赖// 命令配置npm run clean === gulp clean // 清理文件夹npm run compile === gulp compile // 只操作得文件打包编译npm run build === gulp build // 执行...
如果尚未安装gulp-cli项目,请使用npm install --save gulp-cli在本地npm install --save gulp-cli或使用npm install -g gulp-cli全局npm install -g gulp-cli 。 后者可能需要管理权限。 在文件(imageName,容器...
4. 运行Gulp任务:在命令行中执行`gulp build`,Gulp将自动执行转译任务。 **Gulp-ES6-Transpiler-master文件结构** 在解压的`gulp-es6-transpiler-master`文件中,可能包含了以下内容: - `Gulpfile.js`:Gulp任务...
gulp.task('build', gulp.series('styles', function() { // 其他构建任务 })); ``` 标签中提到的"PHP"可能意味着Gulp在PHP项目中的应用。在PHP开发中,Gulp可以帮助我们处理如预处理器编译、图片优化、自动刷新...
3. 执行任务:运行 `gulp` 或特定的任务命令(如 `gulp build`)来启动构建过程。 总的来说,`gulp-rollup-mep` 是一个强大的工具,它结合了 Gulp 的灵活性和 Rollup 的优化能力,为前端开发者提供了一种高效、模块...
基本Gulp项目模板 在前端项目上开始工作的...$ gulp clean build/目录 $ gulp webserver gulp $ gulp webserver启动本地webserver进行livereload $ gulp build项目的完整构建 $ gulp watch运行webserver任务并跟踪更
gulp build --dev --main var args = require ( 'get-gulp-args' ) ( ) ; process . env . NODE_ENV = args [ 0 ] || 'dev' ; process . env . PROJECT = args [ 1 ] || 'main' ; 或者 gulp build --env dev --...
发展历程运行: gulp build --env=dev阶段运行: gulp build --env=stage生产运行: gulp build --env=prod服务器启动本地开发服务器。 此外,gulp将监视文件的任何更改,并在服务器运行时重新加载浏览器。
gulp入门套件 如果您想知道如何构建这种入门套件,可以观看我在使用该入门套件时...为了构建项目的生产版本,请从克隆的仓库的根目录运行gulp build 。 使用的npm软件包列表 吞咽 浏览器同步 口香糖 gulp-源地图 gulp-