//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. DataReport使用手记

    06年的一篇blog,转过来: 前几天,帮同事改一个VB的课业程序,具体任务就是在程序中添加报表功能,由于考虑到部署环境的问题,所以没有采用我以前惯用的Excel实现,而采用了同事提出的VB自带的Da ...

  2. c++11线程池

    #pragma once #include <future> #include <vector> #include <atomic> #include <qu ...

  3. Spring Boot 事件和监听

    Application Events and Listeners 1.自定义事件和监听 1.1.定义事件 package com.cjs.boot.event; import lombok.Data; ...

  4. AUTOSAR - 标准文档下载

    官网 https://www.autosar.org/ 文档分类 按功能分 按类型分 CLASSIC PLATFORM The AUTOSAR Classic Platform architectur ...

  5. java原子操作的实现原理--转载

    原文地址:http://www.infoq.com/cn/articles/atomic-operation 1. 引言 原子(atom)本意是“不能被进一步分割的最小粒子”,而原子操作(atomic ...

  6. 函数上下文this

    一般来说谁调用上下文都指向谁,具体有以下几种情况: 1.函数用圆括号调用,函数的上下文是window 注意:所有的全局变量都是window的属性,而函数里边定义的变量谁的属性也不是. 2.函数作为对象 ...

  7. python爬虫入门(四)利用多线程爬虫

    多线程爬虫 先回顾前面学过的一些知识 1.一个cpu一次只能执行一个任务,多个cpu同时可以执行多个任务2.一个cpu一次只能执行一个进程,其它进程处于非运行状态3.进程里包含的执行单元叫线程,一个进 ...

  8. 团队项目第二阶段个人进展——Day6

    一.昨天工作总结 冲刺第六天,学习了leancloud的一些数据处理知识,并看了如何在微信小程序中使用 二.遇到的问题 无 三.今日工作规划 通过动手完成一个demo来学习后端数据的请求和响应

  9. CSS中的变形、过渡、动画效果

    一.变形 .过渡效果 1:元素平移 x方向 y方向 transform:translate(100px 100px); 2:过渡动画效果 a:什么属性参与过渡效果 b:过渡时间 c:过渡的效果 值包含 ...

  10. 杨老师课堂_Java核心技术下之控制台模拟记事本案例

    预览效果图: 背景介绍: 编写一个模拟记事本的程序通过在控制台输入指令,实现在本地新建文件打开文件和修改文件等功能. 要求在程序中: 用户输入指令1代表"新建文件",此时可以从控制 ...