//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. ubuntu导入公钥的方法

    导入公钥的办法: #方法1: gpg --keyserver subkeys.pgp.NET --recv 6E871C4A881574DEgpg --export --armor 6E871C4A8 ...

  2. LR性能测试结果样例分析

    http://www.cnblogs.com/hyzhou/archive/2011/11/16/2251316.html   测试结果分析 LoadRunner性能测试结果分析是个复杂的过程,通常可 ...

  3. es6(二):解构赋值

    ES中允许按照一定格式从数组,对象值提取值,对变量进行赋值,这就是解构(Destructuring) let [a,b,c]=[1,10,100] console.log(a,b,c)//1 10 1 ...

  4. maven仓库添加jar架包

    推荐几个好的 Maven 常用仓库网址:http://mvnrepository.com/http://search.maven.org/http://repository.sonatype.org/ ...

  5. 关于Elasticsearch 使用 MatchPhrase搜索的一些坑

    对分词字段检索使用的通常是match查询,对于短语查询使用的是matchphrase查询,但是并不是matchphrase可以直接对分词字段进行不分词检索(也就是业务经常说的精确匹配),下面有个例子, ...

  6. Beta 冲刺day2

    1.昨天的困难,今天解决的进度,以及明天要做的事情 昨天的困难:昨天主要是在确认需求方面花了一些时间,后来终于确认了企业自查风险模块的需求问题 今天解决的进度:根据昨天确认下来的需求,我们基本上完成了 ...

  7. 【转】javascript 分号问题

    javascript的分号代表语句的结束符,但由于javascript具有分号自动插入规则,所以它是一个十分容易让人模糊的东西,在一般情况下,一个换行就会产生一个分号,但实际情况却不然,也就是说在ja ...

  8. ruby klb.rb irb

    1.字符串格式化 Python "%s=%s" % (k, v) 在阅读 Python 字符串格式化的时候,视线先看到字符串的 %s 字样,但是不知道这指的是什么,然后看后面的变量 ...

  9. iOS 中判断应用程序是否为第一次打开

    第一步:在AppDelegate中当应用启动完成后加入一下代码: - (BOOL)application:(UIApplication *)application didFinishLaunching ...

  10. html5中让页面缩放的4种方法

    1.viewport 这种方法,不是所有的浏览器都兼容<meta name="viewport" content="width=640,minimum-scale= ...