适用于nodercms的打包构建脚本
背景
最近自己用nodercms搭建了一个简单的博客系统,用户发布一些自己谁便谢谢的文章。感谢nodercms团队,这个cms轻量易用,用于做个人博客太方便了。
开发了博客系统,肯定设计到部署到AWS或者阿里云等服务器上,那么,打包脚本就是必须的,这里,我自己修改了原有的gulp脚本,添加了打包脚本,实现了一键编译打包。这里就简单的介绍一下。
源文件地址
https://gitlab.com/BowenHBX/nodercms-build-deploy
依赖
"del": "^2.2.0",
"gulp": "^3.8.11",
"gulp-angular-templatecache": "^1.8.0",
"gulp-autoprefixer": "^3.1.0",
"gulp-clean-css": "^2.0.6",
"gulp-concat": "^2.5.2",
"gulp-less": "^3.0.5",
"gulp-plumber": "^1.0.0",
"gulp-uglify": "^1.5.2",
"gulp-util": "^3.0.7",
"shelljs": "^0.7.8",
"run-sequence": "^2.0.0",
完善gulp脚本
其实nodercms团队的gulp编译脚本已经很完善了,我这里只是提取有用的文件并复制到一个临时文件夹下
/**
* 拷贝编译好的资源
*/
gulp.task('copy_other_files', function() {
gulp.src([
'./bin/**',
'./config/**',
'./core/**/*',
'./lib/**',
'./install.lock',
'./*.js',
'./*.json',
'./public/*.*',
'./public/assets/**',
'./public/themes/**',
'./README.md',
'!./config/database.config.js'
], { base: './' })
.pipe(gulp.dest('tmp'))
});
简单说明:
./bin/** : nodercms启动文件存放目录
./config/** : 所有配置文件
!./config/database.config.js : 排除数据库配置,避免覆盖生产环境的数据库配置
其他的目录为node文件和资源模板文件
以上copy_other_files任务会将所有网站运行的必要文件复制到根目录的/tmp/文件加下
添加清除脚本
每次构建前我们都希望tmp文件是空的,避免有多余的旧文件保留
/**
* 清除 tmp
*/
gulp.task('cleanTmp', function(cb) {
return del(['./tmp'], cb);
});
修改build任务
/**
* 生产模式编译
*/
gulp.task('build', cb =>
runSequence(
'cleanTmp',
[
'build-admin-assets-less',
'concat-vendor-js-less',
'concat-vendor-css-less',
'concat-admin-js-less',
'concat-admin-views',
'copy-admin-assets',
'copy-admin-font-awersome-fonts',
],
'copy_other_files',
cb
)
);
这里使用了“run-sequence”插件,该插件是为了让任务同步执行:
- 清除tmp文件夹
- 编译文件
- 复制所有文件到tmp文件夹
到这里整个网站执行需要的文件就都在tmp文件夹下面了,接下来就是打包的工作
打包
在根目录添加文件夹build,在build中添加两个文件:deploy.js, deploy.sh,如下:
build.js文件如下:
const shell = require('shelljs');
const path = require('path');
const pkgInfo = require('../package.json'); (function() {
const appName = pkgInfo.name;
const version = pkgInfo.version; console.log(`deploy app name: ${appName}`); // 版本号合法检查
if (!version) {
console.log('not ci tag or not params, don\'t pack!!!');
return;
} // 进行打包
deploy(`${appName}-${version}`); // 调用发布shell
function deploy(fileName) {
shell.exec(`sh ../build/deploy.sh ${fileName}`, { cwd: path.resolve(__dirname, '../tmp/'), async: true });
}
}());
代码很简单:
- 使用${appName}-${version}组成包的文件名
- 使用shell执行deploy.sh脚本,将/tmp/目录里面的文件打包成${fileName}
shell脚本,deploy.sh的代码如下:
#!/usr/bin/env bash PACK_NAME="$1.tgz" echo ">>> Installing prod dependencies..."
npm i --production
echo "<<<"
echo "" echo ">>> Packing..."
touch $PACK_NAME;
mkdir logs
cd logs
mkdir access && mkdir database && mkdir errors && mkdir system
cd ../
tar -czf ./$PACK_NAME --exclude=$PACK_NAME .
echo "Package: $PACK_NAME"
echo "<<<"
echo "" echo ">>> Show Package's Size..."
ls -lh
echo "<<<"
echo "" echo ">>> copy file"
cd ../
mkdir pack
mv tmp/$PACK_NAME pack/
echo "<<<"
echo ""
这一部分的脚本也很好理解:
- 文件名为deploy.js里面的fileName加上".tgz"
- 创建文件夹logs,并且创建子目录access,database,errors,system(这一步很重要,不然启动的时候可能报权限错误,当然可以使用chmod 777 xxx来修改站点目录权限)
- 打包文件
- 输出文件大小
- 将打包的文件复制到/pack/文件夹下
修改package.json文件scripts配置
"scripts": {
"start": "node ./bin/www &",
"build:dev": "gulp default",
"build:prod": "gulp build",
"deploy:prod": "gulp build && node build/deploy.js prod"
}
当执行deploy:prod后,一个*.tgz文件就生成了,在/pack/目录下;
上传文件到服务器,解压,进入更目录,执行以下脚本nodercms就启动了
$ npm start
到此,这个简单的构建脚本介绍就结束啦!
尊重知识产权,转载请说明出处!
适用于nodercms的打包构建脚本的更多相关文章
- 【Git】自动化Maven项目构建脚本(一)
在公司服务器上搭了个自动化构建环境,一上午写了个构建脚本,现在贴出来给自己看 #!/bin/bash # .配置路径变量 propath=/home/hotspot/.autoBuild/projec ...
- es6零基础学习之构建脚本(二)
编译器打开你的es6项目 首先:创建我们的第一个脚本,tasks/util/args.js 在文件里面要先引入一个包,处理命令行参数 import yargs from 'yargs'; / ...
- 【转载】Gradle学习 第六章:构建脚本基础
转载地址:http://ask.android-studio.org/?/article/11 6.1. Projects and tasks 项目和任务Everything in Gradle si ...
- Android Jenkins 自动化打包构建
前言 在测试app项目过程中,通常都是需要开发打测试包给到测试,但是无论是iOS还是Android的打包过程都是相当漫长的,频繁的回归测试需要频繁的打包,对于开发同学影响还是蛮大的.因此在这种情况下, ...
- 打包python脚本为exe可执行文件-pyinstaller和cx_freeze示例
本文介绍使用cx_freeze和pyinstaller打包python脚本为exe文件 cx_freeze的使用实例 需要使用到的文件wxapp.py, read_file.py, setup.py ...
- Gradle 1.12 翻译——第十三章 编写构建脚本
有关其它已翻译的章节请关注Github上的项目:https://github.com/msdx/gradledoc/tree/1.12,或訪问:http://gradledoc.qiniudn.com ...
- PyInstaller打包Python脚本为exe
1.PyInstaller-3.1.1 百度云链接 http://pan.baidu.com/s/1jHYWin8 密码 oapl 2.安装最新版本的 pywin32-217.win32-py2 ...
- Webpack打包构建太慢了?试试几个方法
Webpack是个很流行的打包工具,但其打包速度却一直被吐槽着 如果不用上一些打包的优化建议,单单打包两三个文件就能花上好几秒,放上几十个入口文件依赖几百上千个包的话,几分钟十几分钟妥妥的 本文整理了 ...
- 约定Jenkins构建脚本
对于Jenkins的使用,我感觉只用到其中一小部分功能,但也就是这一小部分功能,也推动了整个CI/CD的过程,Jenkins的使用方式有很多中,可能我用到的只是其中一种,但是已经满足我的需求,便不再贪 ...
随机推荐
- java后台常见问题
Java后台面试 常见问题 Nginx负载均衡 轮询.轮询是默认的,每一个请求按顺序逐一分配到不同的后端服务器,如果后端服务器down掉了,则能自动剔除 ip_hash.个请求按访问IP的hash结果 ...
- python学习4---实现快速排序
1.QuickSort def Rand_Partition(A,p,r): """ 划分数组的元素下标q :param A: 数组 :param p: 数组左边界 :p ...
- s21day23 python笔记
s21day23 python笔记 一.内容回顾及补充 字符串格式化 %s # 示例一:特别注意:最后的右括号前面必须有逗号(,) msg = '我是%s,年龄%s'%('alex',19,) # 元 ...
- JavaScript 浏览器中的事件
1.事件的基本概念 事件是指在文档或者浏览器中发生的一些特定交互瞬间,比如打开某一个网页,浏览器加载完成后会触发 load 事件,当鼠标悬浮于某一个元素上时会触发 hover 事件,当鼠标点击某一个元 ...
- SQL中Union和Union All
工作中,看到大佬写的一段SQL,查询了五个表中的数据,最后求某个收入的总和,其中使用了Union All,因此在这里记录一下我从中学到的东西 先上语法 Union: [ Select语句1 ] U ...
- day11.2lambda函数表达式 及其返回值注意事项
lambda表达式 用于表示简单的函数 func1=lambda 参数:一句话函数体(默认返回函数体内执行的内容) 1.1结构 func=lambda a1,a2 : a1+100 val=func( ...
- HTML相关内容
一,HTML标签的分类 1,单标签和双标签 2,内联标签:span,b,u,i,a,img 块级标签:h1~h6,p,div,hr,ul,ol,li 二,常用标签 1,head内常用标签 标签 含 ...
- 在VMware上安装CentOS6 64位操作系统
---恢复内容开始--- 1.创建新的虚拟机 2.选择自定义,点击下一步: 3.找到镜像位置,添加: 4.点击“稍后安装操作系统”,点击“下一步”: 5.默认点击“下一步”,然后分配CPU: 这里内存 ...
- 20165313 《网络对抗技术》 Kali安装
一.目的要求 下载 安装 网络 共享 软件源 二.主要步骤 我主要是按照最新超详细虚拟机VMware安装Kali Linux 这个方法做的就没有步骤描述了. 安装结果图: 注意事项 安装过程中如果没有 ...
- rviz初接触2.0
用rviz之前需要安装arbotix 在catkin_ws/src中 git clone https://github.com/vanadiumlabs/arbotix_ros.git 回到catki ...