//gulpfile.js
"use strict"; const gulp = require("gulp"),
newer = require("gulp-newer"),
imagemin = require("gulp-imagemin"),
sass = require("gulp-sass"),
sourcemaps = require("gulp-sourcemaps"),
autoprefixer = require("gulp-autoprefixer"),
cleanCSS = require('gulp-clean-css'),
rename = require("gulp-rename"),
concat = require("gulp-concat"),
uglify = require("gulp-uglify"),
gutil = require("gulp-util"),
lodash = require("lodash"),
gulpSequence = require("gulp-sequence"),
browsersync = require("browser-sync"),
fileinclude = require('gulp-file-include'),
proxyMiddleware = require('http-proxy-middleware'); const folder = {
src: "src/", // source files
dist: "dist/" // build files
}; /*
Copy assets/vendors from their node_module package to scss & js folder
Read More: https://florian.ec/articles/frontend-dependencies-npm/
*/ gulp.task("copy-assets", function () {
var assets = {
js: [
"./node_modules/jquery/dist/jquery.js",
"./node_modules/bootstrap/dist/js/bootstrap.bundle.js",
"./node_modules/moment/moment.js",
"./node_modules/metismenu/dist/metisMenu.js",
"./node_modules/jquery-slimscroll/jquery.slimscroll.js",
"./node_modules/daterangepicker/daterangepicker.js",
"./node_modules/select2/dist/js/select2.min.js",
"./node_modules/jquery-mask-plugin/dist/jquery.mask.min.js",
"./node_modules/jquery-nice-select/js/jquery.nice-select.min.js"
],
scss: [
"./node_modules/metismenu/dist/metisMenu.css",
"./node_modules/daterangepicker/daterangepicker.css",
"./node_modules/select2/dist/css/select2.min.css",
"./node_modules/jquery-nice-select/css/nice-select.css"
],
}; var third_party_assets = {
js: [
"./node_modules/chart.js/dist/Chart.bundle.js",
"./node_modules/datatables.net/js/jquery.dataTables.js",
"./node_modules/datatables.net-bs4/js/dataTables.bootstrap4.js",
"./node_modules/datatables.net-responsive/js/dataTables.responsive.min.js",
"./node_modules/datatables.net-responsive-bs4/js/responsive.bootstrap4.min.js",
"./node_modules/datatables.net-buttons/js/dataTables.buttons.min.js",
"./node_modules/datatables.net-buttons-bs4/js/buttons.bootstrap4.min.js",
"./node_modules/datatables.net-buttons/js/buttons.html5.min.js",
"./node_modules/datatables.net-buttons/js/buttons.flash.min.js",
"./node_modules/datatables.net-buttons/js/buttons.print.min.js",
"./node_modules/datatables.net-keytable/js/dataTables.keyTable.min.js",
"./node_modules/datatables.net-select/js/dataTables.select.min.js",
"./node_modules/jquery-ui/jquery-ui.min.js",
"./node_modules/fullcalendar/dist/fullcalendar.min.js",
"./node_modules/gmaps/gmaps.min.js",
"./node_modules/admin-resources/jquery.vectormap/jquery-jvectormap-1.2.2.min.js",
"./node_modules/admin-resources/jquery.vectormap/maps/jquery-jvectormap-world-mill-en.js",
"./node_modules/admin-resources/jquery.vectormap/maps/jquery-jvectormap-us-merc-en.js",
"./node_modules/admin-resources/jquery.vectormap/maps/jquery-jvectormap-au-mill-en.js",
"./node_modules/admin-resources/jquery.vectormap/maps/jquery-jvectormap-us-il-chicago-mill-en.js",
"./node_modules/admin-resources/jquery.vectormap/maps/jquery-jvectormap-in-mill-en.js",
"./node_modules/ion-rangeslider/js/ion.rangeSlider.min.js",
"./node_modules/toastr/build/toastr.min.js",
"./node_modules/sweetalert2/dist/sweetalert2.min.js",
"./node_modules/mohithg-switchery/dist/switchery.min.js",
"./node_modules/bootstrap-maxlength/bootstrap-maxlength.min.js",
"./node_modules/jquery-sparkline/jquery.sparkline.min.js",
"./node_modules/jquery-knob/dist/jquery.knob.min.js"
],
css: [
"./node_modules/admin-resources/jquery.vectormap/jquery-jvectormap-1.2.2.css",
"./node_modules/datatables.net-bs4/css/dataTables.bootstrap4.css",
"./node_modules/datatables.net-responsive-bs4/css/responsive.bootstrap4.css",
"./node_modules/datatables.net-buttons-bs4/css/buttons.bootstrap4.css",
"./node_modules/datatables.net-select-bs4/css/select.bootstrap4.css",
"./node_modules/fullcalendar/dist/fullcalendar.min.css",
"./node_modules/@mdi/font/css/materialdesignicons.min.css",
"./node_modules/ion-rangeslider/css/ion.rangeSlider.css",
"./node_modules/ion-rangeslider/css/ion.rangeSlider.skinModern.css",
"./node_modules/toastr/build/toastr.min.css",
"./node_modules/sweetalert2/dist/sweetalert2.min.css",
"./node_modules/mohithg-switchery/dist/switchery.min.css"
],
font: [
"./node_modules/@mdi/font/css/materialdesignicons.min.css"
]
}; //copying third party assets
lodash(third_party_assets).forEach(function (assets, type) {
if (type == "css") {
gulp.src(assets).pipe(gulp.dest(folder.src + "css/vendor"));
gulp.src(assets).pipe(gulp.dest(folder.dist + "css/vendor"));
} else if (type == "css") {
gulp.src(assets).pipe(gulp.dest(folder.src + "css/vendor"));
gulp.src(assets).pipe(gulp.dest(folder.dist + "css/vendor"));
}
else {
gulp.src(assets).pipe(gulp.dest(folder.src + "js/vendor"));
gulp.src(assets).pipe(gulp.dest(folder.dist + "js/vendor"));
}
}); //copying required assets
lodash(assets).forEach(function (assets, type) {
if (type == "scss") {
gulp
.src(assets)
.pipe(
rename({
// rename aaa.css to _aaa.scss
prefix: "_",
extname: ".scss"
})
)
.pipe(gulp.dest(folder.src + "scss/vendor"));
} else {
gulp.src(assets).pipe(gulp.dest(folder.src + "js/vendor"));
}
});
}); // image processing
gulp.task("imageMin", function () {
var out = folder.dist + "assets/images";
return gulp
.src(folder.src + "assets/images/**/*")
.pipe(newer(out))
.pipe(imagemin())
.pipe(gulp.dest(out));
}); // copy fonts
// copy fonts from src folder to dist folder
gulp.task("fonts", function () {
var out = folder.dist + "assets/fonts/"; return gulp.src([folder.src + "assets/fonts/**/*"]).pipe(gulp.dest(out));
}); // copy html
// copy html files from src folder to dist folder, also copy favicons
gulp.task("html", function () {
var out = folder.dist; return gulp
.src([
folder.src + "html/*.html",
folder.src + "html/*.ico", // favicons
folder.src + "html/*.png"
])
.pipe(fileinclude({
prefix: '@@',
basepath: '@file',
indent: true
}))
.pipe(gulp.dest(out));
}); // compile & minify sass
gulp.task("css", function () {
gulp
.src([folder.src + "/scss/bootstrap.scss"])
.pipe(sourcemaps.init())
.pipe(sass()) // scss to css
.pipe(
autoprefixer({
browsers: ["last 2 versions"]
})
)
.pipe(cleanCSS())
.pipe(
rename({
// rename app.css to bootstrap.min.css
suffix: ".min"
})
)
.pipe(sourcemaps.write("./")) // source maps for bootstrap.min.css
.pipe(gulp.dest(folder.dist + "css/"));
gulp
.src([folder.src + "/scss/icons.scss"])
.pipe(sourcemaps.init())
.pipe(sass()) // scss to css
.pipe(
autoprefixer({
browsers: ["last 2 versions"]
})
)
.pipe(cleanCSS())
.pipe(
rename({
// rename app.css to icons.min.css
suffix: ".min"
})
)
.pipe(sourcemaps.write("./")) // source maps for icons.min.css
.pipe(gulp.dest(folder.dist + "css/")); return gulp
.src([folder.src + "/scss/app.scss"])
.pipe(sourcemaps.init())
.pipe(sass()) // scss to css
.pipe(
autoprefixer({
browsers: ["last 2 versions"]
})
)
.pipe(gulp.dest(folder.dist + "css/"))
.pipe(cleanCSS())
.pipe(
rename({
// rename app.css to app.min.css
suffix: ".min"
})
)
.pipe(sourcemaps.write("./")) // source maps for app.min.css
.pipe(gulp.dest(folder.dist + "css/"));
}); // js
gulp.task("javascript", function () {
var out = folder.dist + "js/"; //copying demo pages related assets
var app_pages_assets = {
js: [
folder.src + "js/pages/dashboard.init.js",
folder.src + "js/pages/calendar.init.js",
folder.src + "js/pages/chartjs.init.js",
folder.src + "js/pages/datatables.init.js",
folder.src + "js/pages/form-advanced.init.js",
folder.src + "js/pages/maps.init.js",
folder.src + "js/pages/range-sliders.init.js",
folder.src + "js/pages/toastr.init.js",
folder.src + "js/pages/sweet-alerts.init.js",
folder.src + "js/pages/sparkline.init.js"
]
}; lodash(app_pages_assets).forEach(function (assets, type) {
gulp.src(assets)
.pipe(uglify())
.on("error", function (err) {
gutil.log(gutil.colors.red("[Error]"), err.toString());
})
.pipe(gulp.dest(out + "pages"));
}); // It's important to keep files at this order
// so that `app.min.js` can be executed properly
gulp
.src([
folder.src + "js/vendor/jquery.js",
folder.src + "js/vendor/bootstrap.bundle.js",
folder.src + "js/vendor/moment.js",
folder.src + "js/vendor/jquery.slimscroll.js",
folder.src + "js/vendor/daterangepicker.js",
folder.src + "js/vendor/metisMenu.js",
folder.src + "js/vendor/select2.min.js",
folder.src + "js/vendor/jquery.mask.min.js",
folder.src + "js/vendor/jquery.nice-select.min.js",
])
.pipe(sourcemaps.init())
.pipe(concat("vendor.js"))
.pipe(gulp.dest(out))
.pipe(
rename({
// rename app.js to app.min.js
suffix: ".min"
})
)
.pipe(uglify())
.on("error", function (err) {
gutil.log(gutil.colors.red("[Error]"), err.toString());
})
.pipe(sourcemaps.write("./"))
.pipe(gulp.dest(out)); return gulp
.src([
folder.src + "js/app.js"
])
.pipe(sourcemaps.init())
.pipe(concat("app.js"))
.pipe(gulp.dest(out))
.pipe(
rename({
// rename app.js to app.min.js
suffix: ".min"
})
)
.pipe(uglify())
.on("error", function (err) {
gutil.log(gutil.colors.red("[Error]"), err.toString());
})
.pipe(sourcemaps.write("./"))
.pipe(gulp.dest(out));
}); var middleware = proxyMiddleware('/api', {
target: 'http://localhost:8080',
changeOrigin: true,
pathRewrite: {
'^/api': ''
},
logLevel: 'debug'
}); // live browser loading
gulp.task("browserSync", function () {
browsersync.init({
server: {
baseDir: folder.dist,
index:'rentingHouseAdd.html', // 指定默认打开的文件
middleware:middleware
},
port:8050
});
}); // watch all changes
gulp.task("watch", function () {
gulp.watch(folder.src + "html/**", ["html", browsersync.reload]);
gulp.watch(folder.src + "assets/images/**/*", [
"imageMin",
browsersync.reload
]);
gulp.watch(folder.src + "assets/fonts/**/*", ["fonts", browsersync.reload]);
gulp.watch(folder.src + "scss/**/*", ["css", browsersync.reload]);
gulp.watch(folder.src + "js/**/*", ["javascript", browsersync.reload]);
}); // default task
gulp.task(
"default",
gulpSequence(
"copy-assets",
"html",
"imageMin",
"fonts",
"css",
"javascript",
"browserSync",
"watch"
)
); // build
gulp.task(
"build",
gulpSequence("copy-assets", "html", "imageMin", "fonts", "css", "javascript")
); // doc
gulp.task("docs", function () {
browsersync.init({
server: {
baseDir: "docs"
}
});
});

gulp、browsersync代理跨域的更多相关文章

  1. nginx代理跨域(mac)

    首先找到nginx.conf文件,修改并添加如下配置 html 文件 <!DOCTYPE html> <html lang="en"> <head&g ...

  2. vue cli+axios踩坑记录+拦截器使用,代理跨域proxy(更新)

    16319 1.首先axios不支持vue.use()方式声明使用,看了所有近乎相同的axios文档都没有提到这一点建议方式 在main.js中如下声明使用 import axios from 'ax ...

  3. vue cli+axios踩坑记录+拦截器使用,代理跨域proxy

    1.首先axios不支持vue.use()方式声明使用,看了所有近乎相同的axios文档都没有提到这一点 建议方式 在main.js中如下声明使用 import axios from 'axios'; ...

  4. CORS跨域与Nginx反向代理跨域优劣对比

    最近写了一些关于前后端分离项目之后,跨域相关方案的基本原理和常见误区的帖子,主要包括CORS和Nginx反向代理.这两种方案项目中都有在用,各有优缺,关于具体使用哪种方案,大家的观点也不大一致,本文主 ...

  5. 使用http-proxy-middleware 代理跨域

    使用http-proxy-middleware 代理跨域 例如请求的url:“http://f.apiplus.cn/bj11x5.json” 1.打开config/index.js,在proxyTa ...

  6. axios踩坑记录+拦截器使用+vue cli代理跨域proxy+webpack打包部署到服务器

    1.小小的提一下vue cli脚手架前端调后端数据接口时候的本地代理跨域问题,如我在本地localhost访问接口http://40.00.100.100:3002/是要跨域的,相当于浏览器设置了一道 ...

  7. 前端笔记之Vue(五)TodoList实战&拆分store&跨域&练习代理跨域

    一.TodoList 1.1安装依赖 安装相关依赖: npm install --save-dev webpack npm install --save-dev babel-loader babel- ...

  8. 使用nginx代理跨域,使用nginx代理bing的每日一图

    前言 自从搞清楚了跨域原理后一直自鸣得意,感觉跨域没啥问题了.而事实上对关于跨域的几个header的理解也有限,但那又如何,我能做到跨域就行了.今天想把博客背景图改成bing的每日一图,发现遇到跨域问 ...

  9. (三)ajax请求不同源之nginx反向代理跨域

    一.基本原理 nginx是一个高性能的web服务器,常用作反向代理服务器.nginx作为反向代理服务器,就是把http请求转发到另一个或者一些服务器上. 用nginx反向代理实现跨域,是最简单的跨域方 ...

随机推荐

  1. php coding中的一些小问题

    最近在SAE上写微博应用,碰到一些小问题,记下来,以供参考: 1.出错提示: Fatal error: Can't use function return value in write context ...

  2. gitolite服务器部署中的一些坑

    1.秘钥登录问题可参考< 安装gitolite,并ssh公钥无密码登录>http://www.cnblogs.com/tr0217/p/4517952.html,该文中推荐了阮一峰的< ...

  3. 八爪鱼在哪里设置xpath

    分享:35个做好的爬虫规则+160篇图文教程汇总 一般在八爪鱼中,获取网页上某个元素的XPATH有以下几种方式:一.在内置浏览器中点选的操作,八爪鱼自动识别XPATH.但是有时候,自动识别的可能不准确 ...

  4. 服务治理利器Hystrix-理论篇

    引言 现在的大中型应用,很多都在朝着服务化.分布式的方向发展.这有多方面的考虑,比如说,方便治理.便于扩展.服务隔离等等.不过在带来如此多利好的同时,不可避免的也会带来麻烦,比如系统架构复杂.服务依赖 ...

  5. SSM博客登录注册

    我的博客采用的是 spring+springmvc+mybatis框架,用maven和git管理项目,之后的其他功能还有待进一步的学习. 首先新建一个maven项目,我的项目组成大概就这样, 建立好项 ...

  6. Flask入门之Jinjia模板的一些语法

    1. 变量表示 {{ argv }} 2. 赋值操作 {% set links = [ ('home',url_for('.home')), ('service',url_for('.service' ...

  7. Data_r_and_w(csv,json,xlsx)

    import osimport sysimport argparsetry:    import cStringIO as StringIOexcept:    import StringIOimpo ...

  8. css基础--深入理解opacity和rgba的区别

    欢迎访问我的个人博客:http://www.xiaolongwu.cn 前言 首先这两个都与透明度有关,那么他们之间有什么具体的区别呢?在实际工作中我们需要注意什么呢?请您接着往下看 语法 1. rg ...

  9. 并发库应用之八 & 循环路障CyclicBarrier应用

    JDK包位置:java.util.concurrent.CyclicBarrier 一个同步辅助类,它允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point).在涉及 ...

  10. 【手记】走近科学之为什么明明实现了IEnumerable<T>的类型却不能调用LINQ扩展方法

    比如Json.NET的JObject明明实现了IEnumerable<T>,具体来说是IEnumerable<KeyValuePair<string, JToken>&g ...