• 在gulp中使用vue多页面开发


    页面html

    <!DOCTYPE html>
    <html lang="zh-CN">
    
    <head>
        <meta charset="UTF-8" />
        <meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1" />
        <meta http-equiv="Cache-Control" content="no-transform" />
        <meta http-equiv="Cache-Control" content="no-siteapp" />
        <meta name="renderer" content="webkit" />
        <title>首页——留学国家</title>
        <meta name="keywords" content="keywords" />
        <link rel="stylesheet" href="./js/lib/flexible/flexible.css" />
        <script src="./js/lib/flexible/flexible.js"></script>
        <meta name="description" content="description" />
        <!-- <link rel="stylesheet" href="./css/sprite.css" /> -->
        <link rel="stylesheet" href="http://webms1.xhd.cn/r/cms/static/swiper/4.x/swiper.min.css">
        <link rel="stylesheet" href="./css/common.debug.css" />
        <link rel="stylesheet" href="./css/index.debug.css" />
        <!-- <link rel="stylesheet" href="./images/icon/svg-symbols.css">
        <script src="./images/icon/svg-symbols.js"></script> -->
    </head>
    
    <body class="">
        <div id="app">
            @@include('header.html',{"type":"a"})
            @@include('navigator.html')
            
            <div class="message">
                {{ message}}
                <ul>
                    <li v-for="item in fruit">
                        <span>{{item.price}}</span>
                        <span>{{item.name}}</span>
                        <span>{{item.weight}}</span>
                    </li>
                </ul>
            </div>       
            
            @@include('list.html')
        </div>
    </body>
    <script src="https://cdn.jsdelivr.net/npm/vue@2.6.0"></script>
    <script src="https://unpkg.com/axios/dist/axios.min.js"></script>
    <script src="http://webms1.xhd.cn/r/cms/static/swiper/4.x/swiper.min.js"></script>
    <script src="./js/common.js"></script>
    <script src="./js/test.js"></script>
    <script>
        var mySwiper = new Swiper('.hotUniversity', {
            slidesPerView: 2.5,
            spaceBetween: 20
        })
        var mySwiper2 = new Swiper('.hotjigou', {
            slidesPerView: 2.5,
            spaceBetween: 20
        })
    </script>
    </html>

    common.js我定义了两种调用接口的方式

    function dealParam(data){
        let _data = Object.keys(data)
      return encodeURI(_data.map(name => `${name}=${data[name]}`).join('&'));
    }
    let http=function(url,param,type){
            let data=null
            let config={
                method: type,
                url: url
              }
            if(type==='post'||type==='POST'){
                data=dealParam(param)
                config.data=data
            }else{
                config.params=param
            }
            return axios(config)
              .then(function (res) {
                  return res?
                  Promise.resolve(res) :
                  Promise.reject(res)
            })
    }
    
    
    let ajax1=axios.create({
        headers: {
            'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8'
        }
    })
    function ajax(type, url,  data = {}) {
        if (type === 'get') {
            data = {
                params: data
            }
        }else{
            data=dealParam(data)
        }
        return ajax1[type](url , data)
            .then(res => {
                return res?
                    Promise.resolve(res) :
                    Promise.reject(res)
            })
    }
    let commonajax={
        get: (url,  data) => {
            return ajax('get', url,  data)
        },
        post: (url, data) => {
            return ajax('post', url,  data)
        }
    }

    vue实例挂载并调用接口方式test.js

    var app = new Vue({
        el: '#app',
        data: {
            message: 'Hello Vue!',
            fruit: [
                { price: 2, name: '苹果', weight: 1.5 },
                { price: 2, name: '香蕉', weight: 1.5 },
                { price: 2, name: '橘子', weight: 1.5 },
                { price: 2, name: '樱桃', weight: 1.5 }
            ]
        },
        created() {
            let param = {
                orderBy: 22,
                siteId: 3,
                pageNo: 1,
                pageSize: 10,
                q: '雅思'
            }
            let param2={
                channelIds: 18285,
                first: 0,
                count: 3,
                orderBy: 4,
                format: 1
            }
            // commonajax.get('http://wh.xhd.cn/api/content/list.jspx', param2)
            http('http://wh.xhd.cn/api/content/list.jspx', param2)
                .then(res => {
                    console.log(res)
                })
        //    commonajax.post('http://wh.xhd.cn/pcCourse/classTree.jspx', param)
            http('http://wh.xhd.cn/pcCourse/classTree.jspx', param,'post')
                .then(res => {
                    console.log(res, 222222)
                })
        }
    })

    gulp配置

    const basePath = require('./gulpfile.base');
    const { src, dest, task, watch, series, parallel } = require('gulp');
    const del = require('del');
    // const rename = require("gulp-rename");
    const sourcemaps = require('gulp-sourcemaps');
    const fileInclude = require('gulp-file-include');
    // const rev = require('gulp-rev');
    // const revCollector = require('gulp-rev-collector');
    
    // const eslint = require('gulp-eslint');
    const babel = require('gulp-babel');
    // const uglify = require('gulp-uglify');
    
    const sass = require('gulp-sass');
    sass.compiler = require('node-sass');
    const postcss = require('gulp-postcss')
    const autoprefixer = require('autoprefixer');
    const cleancss = require('gulp-clean-css'); // 压缩css
    var px2rem = require('gulp-px3rem')
    // const cssnano = require('cssnano');
    
    const cache = require('gulp-cache');
    const imagemin = require('gulp-imagemin');
    const spritesmith = require('gulp.spritesmith');
    const svgSymbols = require('gulp-svg-symbols');
    const svgSymbols2js = require('gulp-svg-symbols2js');
    
    const connect = require('gulp-connect');
    const proxy = require('http-proxy-middleware');
    
    // Clean dist
    task('Clean', async () => {
        await del([basePath.dest]);
    });
    
    /* ======== 开发环境配置 ======== */
    // CopyHtml
    task('CopyHtml', async () => {
        return await src(basePath.html.src)
            .pipe(fileInclude({
                prefix: '@@',
                basepath: basePath.includeBasePath,
                indent: true
            }))
            .pipe(dest(basePath.html.dest))
            .pipe(connect.reload())
    })
    
    // CopyLibrary
    task('CopyLibrary', async () => {
        return await src(basePath.lib.src)
            .pipe(dest(basePath.lib.dest))
            .pipe(connect.reload())
    })
    
    // CompileJS
    task('CompileJS', async () => {
        return await src(basePath.js.src, { nodir: true })
            // .pipe(eslint())
            // .pipe(eslint.format())
            .pipe(sourcemaps.init())
            .pipe(babel({
                presets: ['@babel/env']
            }))
            .pipe(sourcemaps.write('./map'))
            .pipe(dest(basePath.js.dest))
            .pipe(connect.reload())
    })
    
    // Sass
    task('Sass', async () => {
        return await src(basePath.sass.src)
            
            .pipe(sourcemaps.init())
            
            .pipe(sass({
                outputStyle: 'expanded'
            }).on('error', sass.logError))
            .pipe(postcss([autoprefixer()]))
            .pipe(px2rem({remUnit: 75}))
            .pipe(cleancss())
            .pipe(sourcemaps.write('./map'))
            .pipe(dest(basePath.sass.dest))
            .pipe(connect.reload())
    })
    // Images
    task('Images', async () => {
        return await src(basePath.images.src, { nodir: true })
            .pipe(cache(imagemin([
                imagemin.gifsicle({ interlaced: true }),
                imagemin.jpegtran({ progressive: true }),
                imagemin.optipng({ optimizationLevel: 5 }),
                imagemin.svgo({
                    plugins: [
                        { removeViewBox: true },
                        { cleanupIDs: false }
                    ]
                })
            ])))
            .pipe(dest(basePath.images.dest))
            .pipe(connect.reload())
    })
    
    // Sprite
    task('Sprite', async () => {
        return await src(basePath.sprites.src)
            .pipe(spritesmith({
                imgName: 'sprite.png',
                imgPath: '../images/sprite.png',
                cssName: '../css/sprite.css',
                padding: 10,
                algorithm: 'top-down', // top-down,left-right,diagonal,alt-diagonal,binary-tree
                cssTemplate: (data) => {
                    let arr = [];
                    data.sprites.map(sprite => {
                        arr.push(
                            `.icon-${sprite.name} {
         ${sprite.px.width};
        height: ${sprite.px.height};
        background: url(${sprite.image}) ${sprite.px.offset_x} ${sprite.px.offset_y} no-repeat;
        background-size: ${sprite.px.total_width} ${sprite.px.total_height};       
    }
    `)
                    })
                    return arr.join('')
                }
            }))
            .pipe(dest(basePath.sprites.dest))
            .pipe(connect.reload())
    })
    
    // Svgsprite
    task('Svgsprite', async () => {
        return await src(basePath.svgsprites.src)
            .pipe(svgSymbols({
                id: 'icon_svg_%f',
                className: '.icon_svg_%f',
                templates: [
                    'default-svg',
                    'default-css',
                    'default-demo'
                ]
            }))
            .pipe(svgSymbols2js())
            .pipe(dest(basePath.svgsprites.dest))
    })
    
    // Server
    task('Server', async () => {
        connect.server({
            root: basePath.dest,
            port: 8886,
            host:'0.0.0.0',
            livereload: true,
            // middleware: function (connect, opts) {
            //     return [
            //         proxy('/api', {
            //             target: 'http://www.xhd.cn',
            //             changeOrigin: true
            //         })
            //     ]
            // }
        })
    })
    
    // 处理文件
    task('Resources', series('CopyHtml', parallel('CompileJS', 'Sass', 'Images', 'Sprite', 'Svgsprite', 'CopyLibrary')));
    
    // 监听文件变化
    task('Watch', () => {
        watch(basePath.include, series('CopyHtml'));
        watch(basePath.html.src, series('CopyHtml'));
        watch(basePath.lib.src, series('CopyLibrary'));
        watch(basePath.js.src, series('CompileJS'));
        watch(basePath.sass.src, series('Sass'));
        watch(basePath.images.src, series('Images'));
        watch(basePath.sprites.src, series('Sprite'));
        watch(basePath.svgsprites.src, series('Svgsprite'));
    })
    
    // 开发环境打包
    task('dev', series('Clean', 'Resources', 'Server', 'Watch'));

    gulpfile.base.js

    const basePath = {
        src: './src',
        dest: './dist',
        includeBasePath: './src/include',
        include: './src/include/*.html',
        html: {
            src: './src/*.html',
            dest: './dist'
        },
        js: {
            src: ['./src/js/**/*.js', '!./src/js/lib/**/*.js'],
            dest: './dist/js',
            revDest: './dist/rev/js'
        },
        lib: {
            src: './src/js/lib/**/*',
            dest: './dist/js/lib'
        },
        sass: {
            src: './src/sass/**/*.scss',
            dest: './dist/css',
            revDest: './dist/rev/css'
        },
        images: {
            src: ['./src/images/**/*', '!./src/images/sprites/*', '!./src/images/svg/*'],
            dest: './dist/images'
        },
        sprites: {
            src: './src/images/sprites/*.png',
            retinaSrc: './src/images/sprites/*@2x.png',
            dest: './dist/images'
        },
        svgsprites: {
            src: './src/images/svg/*.svg',
            dest: './dist/images/icon'
        }
    }
    
    module.exports = basePath;
  • 相关阅读:
    redis基本介绍搭建篇
    Percona XtraDB Cluster集群
    path模块
    vue相关
    Vue首页加载过慢 解决方案
    从用户输入url到页面最后呈现 发生了些什么?
    cookie
    javascript中怎么判断对象{}为空
    jquery之stop()的用法
    跨域
  • 原文地址:https://www.cnblogs.com/nanacln/p/11951614.html
Copyright © 2020-2023  润新知