gulp配置打包微信和支付宝小程序

方法一:

文件目录
在这里插入图片描述

上代码

gulpfile.js

var gulp = require("gulp");
var config = require("./index.js");
var rename = require("gulp-rename");
var clean = require("gulp-clean");
var less = require("gulp-less");
const SOURCE_CODE_PATH = "./src";
//清除
gulp.task("clean", (done) => {
  gulp.src("./dist").pipe(clean());
  done();
});
//输出wxml
gulp.task("wxml", (done) => {
  gulp.src("./src/**/*.wxml").pipe(gulp.dest(config.dist));
  done();
});
//输出html
gulp.task("html", (done) => {
  gulp
    .src("./src/**/*.html")
    .pipe(
      rename(function (path) {
        path.extname = ".wxml";
      })
    )
    .pipe(gulp.dest(config.dist));
  done();
});
//输出less
gulp.task("less", (done) => {
  gulp
    .src("./src/**/*.less")
    .pipe(
      less({
        outputStyle: "compressed",
      })
    )
    .pipe(
      rename(function (path) {
        path.extname = ".wxss";
      })
    )
    .pipe(gulp.dest(config.dist));
  done();
});
//输出wxss
gulp.task("wxss", (done) => {
  gulp.src("./src/**/*.wxss").pipe(gulp.dest(config.dist));
  done();
});
//输入wxml
gulp.task("json", (done) => {
  gulp.src("./src/**/*.json").pipe(gulp.dest(config.dist));
  done();
});
//输出js
gulp.task("js", (done) => {
  gulp.src("./src/**/*.js").pipe(gulp.dest(config.dist));
  done();
});
//输出image
gulp.task("image", (done) => {
  gulp
    .src("./src/**/*.{png,jpg,gif,ico}")

    .pipe(gulp.dest(config.dist));
  done();
});
//输出sjs
gulp.task("sjs", (done) => {
  gulp.src("./src/**/*.sjs").pipe(gulp.dest(config.dist));
  done();
});

// 监听
gulp.task("watch", (done) => {
  gulp.watch(SOURCE_CODE_PATH + "/**/*.html", gulp.series("html"));
  gulp.watch(SOURCE_CODE_PATH + "/**/*.wxml", gulp.series("wxml"));
  gulp.watch(SOURCE_CODE_PATH + "/**/*.less", gulp.series("less"));
  gulp.watch(SOURCE_CODE_PATH + "/**/*.wxss", gulp.series("wxss"));
  gulp.watch(SOURCE_CODE_PATH + "/**/*.js", gulp.series("js"));
  gulp.watch(SOURCE_CODE_PATH + "/**/*.sjs", gulp.series("sjs"));
  gulp.watch(SOURCE_CODE_PATH + "/**/*.{json,json5}", gulp.series("json"));
  gulp.watch(
    SOURCE_CODE_PATH + "/**/*.{png,jpg,jpeg,gif,ico,svg,webp}",
    gulp.series("image")
  );
  done();
});
//dev任务  需要异步执行wxml,ascc,json,js,image任务
gulp.task(
  "dev",
  gulp.series(
    "html",
    "wxml",
    "less",
    "wxss",
    "json",
    "js",
    "image",
    "sjs",
    "watch",
    (done) => {
      gulp
        .src(config.dev)
        .pipe(
          rename(function (path) {
            path.basename = "config";
          })
        )
        .pipe(gulp.dest(config.dist));
      done();
    }
  )
);
//test任务 需要异步执行wxml,ascc,json,js,image任务
gulp.task(
  "test",
  gulp.series(
    "html",
    "wxml",
    "less",
    "wxss",
    "json",
    "js",
    "image",
    "sjs",
    "watch",
    (done) => {
      gulp
        .src(config.test)
        .pipe(
          rename(function (path) {
            path.basename = "config";
          })
        )
        .pipe(gulp.dest(config.dist));
      done();
    }
  )
);

//prod任务 需要异步执行wxml,ascc,json,js,image任务
gulp.task(
  "prod",
  gulp.series(
    "html",
    "wxml",
    "wxss",
    "less",
    "json",
    "js",
    "image",
    "sjs",
    "watch",
    (done) => {
      gulp
        .src(config.prod)
        .pipe(
          rename(function (path) {
            path.basename = "config";
          })
        )
        .pipe(gulp.dest(config.dist));
      done();
    }
  )
);
//默认任务,监听所有文件的而变化,出了图片
gulp.task(
  "default",
  gulp.series(
    "html",
    "wxml",
    "wxss",
    "less",
    "json",
    "js",
    "image",
    "sjs",
    function () {
      gulp.watch("./src/**/*.html", (done) => {
        gulp
          .src("./src/**/*.html")
          .pipe(
            rename(function (path) {
              path.extname = ".wxml";
            })
          )
          .pipe(gulp.dest(config.dist));
        done();
      });

      gulp.watch("./src/**/*.wxml", (done) => {
        gulp.src("./src/**/*.wxml").pipe(gulp.dest(config.dist));
        done();
      });
      gulp.watch("./src/**/*.less", (done) => {
        gulp
          .src("./src/**/*.less")
          .pipe(
            less({
              outputStyle: "compressed",
            })
          )
          .pipe(
            rename(function (path) {
              path.extname = ".wxss";
            })
          )
          .pipe(gulp.dest(config.dist));
        done();
      });

      gulp.watch("./src/**/*.wxss", (done) => {
        gulp.src("./src/**/*.wxss").pipe(gulp.dest(config.dist));
        done();
      });
      gulp.watch("./src/**/*.json", (done) => {
        gulp.src("./src/**/*.json").pipe(gulp.dest(config.dist));
        done();
      });
      gulp.watch("./src/**/*.js", (done) => {
        gulp.src("./src/**/*.js").pipe(gulp.dest(config.dist));
        done();
      });
      gulp.watch("./src/**/*.sjs", (done) => {
        gulp.src("./src/**/*.sjs").pipe(gulp.dest(config.dist));
        done();
      });
    }
  )
);

gulpfile.prod.js

// 生产配置项
const config = {
    env: "test",
    a:1
}

package.json

{
  "dependencies": {
    "clean": "^4.0.2",
    "cross-env": "^7.0.3",
    "gulp": "^4.0.0",
    "gulp-clean": "^0.4.0",
    "gulp-less": "^4.0.1",
    "gulp-rename": "^1.4.0"
  },
  "name": "aaa",
  "version": "1.0.0",
  "main": "index.js",
  "scripts": {
    "dev:dev": "cross-env NODE_ENV=dev gulp dev",
    "dev:test": "cross-env NODE_ENV=test gulp test",
    "dev:prod": "cross-env NODE_ENV=prod gulp prod",
    "build:test": "cross-env NODE_ENV=test gulp build",
    "build:prod": "cross-env NODE_ENV=prod gulp build",
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "repository": {
    "type": "git",
    "url": ""
  },
  "author": "",
  "license": "ISC",
  "description": ""
}

方法二(zfb):

文件目录:在根目录,src同级新建文件夹config,gulpfile.js
在这里插入图片描述
gulpfile.js

const {
    src,
    dest,
    parallel,
    series,
    watch
} = require('gulp');
const loadPlugins = require('gulp-load-plugins');
const path = require('path');
const chalk = require('chalk');
const plugins = loadPlugins();
// gulp-cached 将构建过的文件,生成一个hash,缓存在内存中,只更新修改文件,而不再会一次性重新构建全部监控文件。
const CONFIG_PATH = './configs';
const SOURCE_CODE_PATH = './src';
const OUTPUT_PATH = './dist';
const ENV = process.env.NODE_ENV || 'prod';
const startTime = Date.now();
const clean = () => {
    if (process.env.CLEAR_CACHE) {
        // 手动清理cache缓存
        plugins.cache.clearAll();
    }
    return src([
        OUTPUT_PATH + '**/*', '!' + OUTPUT_PATH + '/.tea', '!' + OUTPUT_PATH + '/mini.project.json', '!' + OUTPUT_PATH + '/node_modules',
    ]).pipe(plugins.plumber()).pipe(plugins.clean());
};
// 清空dist
const env = () => {
    return src(path.resolve(CONFIG_PATH, `./config.${ENV}.js`,)).pipe(plugins.rename(function(path) {
        path.basename = 'config';
    })).pipe(dest(SOURCE_CODE_PATH));
};
const html = () => {
    return src([
        SOURCE_CODE_PATH + '/**/*.{axml,html}', '!' + SOURCE_CODE_PATH + '/node_modules/**/*',
    ]).pipe(plugins.cached('html-cached')).pipe(plugins.fileInclude({
        prefix: '@@',
        basepath: '@file',
    })).pipe(plugins.rename(function(path) {
        path.extname = '.axml';
    })).pipe(dest(OUTPUT_PATH));
};
const style = () => {
    return src([
        SOURCE_CODE_PATH + '/**/*.{less,css,acss}', '!' + SOURCE_CODE_PATH + '/node_modules/**/*',
    ]).pipe(plugins.cached('style-cached')).pipe(plugins.plumber()).pipe(plugins.styleAliases({
        '@common': './miniapp/common',
    })) // less会把@import打包进来,使用真实项目路径;js和axml不用,模拟器读取dist目录根路径即为dist
        .pipe(plugins.less({
            outputStyle: 'compressed',
        })).pipe(plugins.autoprefixer({
            cascade: false
        })).pipe(plugins.base64({
            extensions: ['svg', 'png', 'jpg', 'jpeg', 'webp'],
            exclude: [/https?/],
            maxImageSize: 8 * 1024, // bytes
            debug: false,
        })).pipe(plugins.rename(function(path) {
            path.extname = '.acss';
        })).pipe(dest(OUTPUT_PATH));
};
const js = () => {
    return src([
        SOURCE_CODE_PATH + '/**/*.js', '!' + SOURCE_CODE_PATH + '/node_modules/**/*',
    ]).pipe(plugins.cached('js-cached')).pipe(plugins.cache(plugins.babel({
        plugins: ['@babel/plugin-proposal-optional-chaining', '@babel/plugin-proposal-class-properties'],
    }), {
        name: 'js-cache',
    })).pipe(dest(OUTPUT_PATH));
};
const sjs = () => {
    return src([
        SOURCE_CODE_PATH + '/**/*.sjs', '!' + SOURCE_CODE_PATH + '/node_modules/**/*',
    ]).pipe(plugins.cached('sjs-cached')).pipe(dest(OUTPUT_PATH));
};
const json = () => {
    return src([
        SOURCE_CODE_PATH + '/**/*.{json,json5}', '!' + SOURCE_CODE_PATH + '/node_modules/**/*',
    ]).pipe(plugins.cached('json-cached')).pipe(plugins.json5ToJson({
        beautify: true, // default
    })).pipe(dest(OUTPUT_PATH));
};
const image = () => {
    return src([
        SOURCE_CODE_PATH + '/**/*.{png,jpg,jpeg,gif,ico,svg,webp}', '!' + SOURCE_CODE_PATH + '/node_modules/**/*',
    ]).pipe(plugins.cached('image-cached')).pipe(dest(OUTPUT_PATH));
};
const startWatch = (cb) => {
    cb();
    watch(SOURCE_CODE_PATH + '/**/*.tmpl', html);
    watch(SOURCE_CODE_PATH + '/**/*.{html,axml}', html);
    watch(SOURCE_CODE_PATH + '/**/*.{less, acss, css}', style);
    watch(SOURCE_CODE_PATH + '/**/*.js', js);
    watch(SOURCE_CODE_PATH + '/**/*.sjs', sjs);
    watch(SOURCE_CODE_PATH + '/**/*.{json,json5}', json);
    watch(SOURCE_CODE_PATH + '/**/*.{png,jpg,jpeg,gif,ico,svg,webp}', image);
    const endTime = Date.now();
    console.log(chalk.blue('当前环境是:' + ENV));
    console.log(chalk.green('编译用时' + (endTime - startTime) / 1000 + 's'));
    console.log(chalk.yellow('监听中'));
};
const main = parallel(html, js, json, sjs, style, image);
const dev = series(env, main, startWatch, (cb) => {
    cb();
});
const build = series(clean, env, main, (cb) => {
    cb();
    const endTime = Date.now();
    console.log(chalk.blue('当前环境是:' + ENV));
    console.log(chalk.green('编译完成,用时' + (endTime - startTime) / 1000 + 's'));
});
module.exports = {
    dev,
    build
};

packages.jaon

"scripts": {
    "dev:dev": "cross-env NODE_ENV=dev gulp dev",
    "dev:test": "cross-env NODE_ENV=test gulp dev",
    "dev:prod": "cross-env NODE_ENV=prod gulp prod",
    "build:test": "cross-env NODE_ENV=test gulp build",
    "build:prod": "cross-env NODE_ENV=prod gulp build",
    "test": "echo \"Error: no test specified\" && exit 1"
  },
"devDependencies": {
    "@babel/plugin-proposal-class-properties": "^7.18.6",
    "@babel/plugin-proposal-optional-chaining": "^7.21.0",
    "gulp": "^4.0.0",
    "gulp-autoprefixer": "^7.0.1",
    "gulp-babel": "^8.0.0",
    "gulp-base64": "^0.1.3",
    "gulp-cache": "^1.1.3",
    "gulp-cached": "^1.1.1",
    "gulp-clean": "^0.4.0",
    "gulp-file-include": "^2.3.0",
    "gulp-json-editor": "^2.5.4",
    "gulp-json5-to-json": "^0.2.1",
    "gulp-less": "^4.0.1",
    "gulp-load-plugins": "^2.0.8",
    "gulp-plumber": "^1.2.1",
    "gulp-rename": "^1.4.0",
    "gulp-style-aliases": "^1.1.11"
  }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
要在微信小程序中支持Sass,可以使用以下方法: 1. 第一种方法是通过VSCode扩展来支持Sass。你可以在VSCode的扩展商店中搜索并安装名为"Easy Sass"的扩展。安装完成后,您可以在项目中的`.scss`文件中编写样式代码。保存后,扩展会自动将Sass代码编译为相应的`.wxss`文件中的CSS代码。 2. 第二种方法是使用Gulp或Webpack等构建工具来处理Sass。您可以将Sass文件放入项目中的特定文件夹,并使用构建工具配置相应的任务来将Sass编译为CSS。然后,将生成的CSS文件引入到您的微信小程序中。 无论您选择哪种方法,都需要确保您的开发环境中已经安装了相关的工具和依赖,如Node.js、Gulp或Webpack等。另外还需要在项目的配置文件中进行相应的配置以支持Sass编译。 请根据您的具体开发需求和项目架构选择适合您的方法,并根据相应的文档进行配置和使用。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [详解如何在微信小程序中愉快地使用sass](https://download.csdn.net/download/weixin_38718307/12954954)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [微信小程序 基础模板引入sass的两种方法](https://blog.csdn.net/qq_45560350/article/details/130880123)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

C+ 安口木

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值