webpack编译微信小程序

这篇具有很好参考价值的文章主要介绍了webpack编译微信小程序。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

微信小程序开发目前主要还是依赖小程序原生开发者工具,但开发者工具目前还不支持常用的less、sass样式编译,以及环境变量配置等功能。使用webpack就可以弥补这些问题。

思路

webpack启动后,通过webpack-shell-plugin-next包执行启动后的一些配置

项目结构

webpack编译微信小程序

scripts目录存放的是webpack执行后的配置

src目录存放微信小程序代码

index.js是webpack入口文件,无实际业务作用

webpack.config.js是webpack启动的默认执行文件

文件代码

package.json

scss2wxss:在scss文件同级编译scss为wxss

wxss-cli:在scss文件同级编译less为wxss

{
  "name": "webpack-mini-program",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "build": "webpack --config webpack.config.js"
  },
  "author": "bucong",
  "license": "ISC",
  "devDependencies": {
    "scss2wxss": "^1.0.2",
    "webpack": "^5.88.0",
    "webpack-cli": "^5.1.4",
    "webpack-shell-plugin-next": "^2.3.1",
    "wxss-cli": "^1.0.4"
  }
}
webpack.config.js
// webpack执行后,执行shell脚本插件
const WebpackShellPluginNext = require('webpack-shell-plugin-next');

module.exports = {
  entry: "./index.js", // 指定入口文件,webpack必须配置入口文件,否则无法打包,配置一个空文件即可
  mode: 'none', // 设置默认mode,如果不设置webpack会报警告,也可以根据需要设置 development、production
  plugins: [
    // 在构建完后,使用 Webpack Shell 插件读取和修改你的 JS 文件
    new WebpackShellPluginNext({
      // 你要运行的任何 shell 命令都可以在这里配置(例如 node.js 脚本)
      onBuildEnd: {
        scripts: [
          'node ./scripts/update-file.js', // update-file.js配置了修改小程序环境变量的功能
          'npx scss2wxss', // 使用 scss2wxss 将scss文件转换为wxss文件
          // 'wxss ./src' // 使用 wxss-cli 将less文件转换为wxss文件
        ],
        blocking: false,
        parallel: true
      }
    })
  ]
};
scripts/update-file.js
const fs = require('fs');
const path = require('path');

// 获取命令传入的环境变量 npm run build --env=test
const env = process.env.npm_config_env || 'dev';

// 需要修改的json文件
const jsonPath = path.resolve('./src/project.config.json');
fs.readFile(jsonPath, 'utf-8', (err, data) => {
  if (err) {
    console.error(err);
    return;
  }
  // 先解析json为对象
  const json = JSON.parse(data);
  // 修改对应字段的value值(根据环境修改对应小程序的appid)
  if (env === 'pd') {
    json.appid = 'pdAppId';
  } else if (env === 'test') {
    json.appid = 'testAppId';
  } else {
    json.appid = 'devAppId';
  }

  fs.writeFile(jsonPath, JSON.stringify(json, null, 2), (err) => {
    if (err) {
      console.error(err);
      return;
    }
    console.log('update-json.js > JSON 文件已更新');
  });
});


// 需要修改的js文件
const jsPath = path.resolve('./src/config/env.js');
fs.readFile(jsPath, 'utf-8', (err, data) => {
  if (err) {
    console.error(err);
    return;
  }
  // 修改文件内容
  const key = 'env'; // 对象的key或者变量名
  const newValue = env; // 替换后的值
  // 正则匹配对象的key,将文件中key为env的值改为命令传入的环境变量,示例:{ env: 'dev' }
  // const pattern = new RegExp(`(${key}:\\s*['"])\\w+(['"])`);

  // 正则匹配变量赋值,将文件中变量名为env的值改为命令传入的环境变量,示例:const env = 'dev'
  const pattern = new RegExp(`(${key} =\\s*['"])\\w+(['"])`);

  // 替换对应的值
  const newData = data.replace(pattern, `$1${newValue}$2`);

  fs.writeFile(jsPath, newData, (err) => {
    if (err) {
      console.error(err);
      return;
    }
    console.log('update-json.js > JS 文件已更新');
  });
});


// 替换文件全部内容
const indexPath = path.resolve('./index.js');
// index.js的文件内容为一个console
const indexData = `console.log('indexData')`;
fs.writeFile(indexPath, indexData, (err) => {
  if (err) {
    console.error(err);
    return;
  }
  console.log('update-json.js > JS 文件已更新');
});

通过webpack修改的文件

src/config/env.js
// 环境变量,通过webpack修改js内容,更新env的值
const env = 'dev';

// 各环境配置
const envConfig = {
  dev: {
    baseUrl: 'http://dev.base.com',
    ossUrl: 'http://dev.oss.com'
  },
  test: {
    baseUrl: 'http://test.base.com',
    ossUrl: 'http://test.oss.com'
  },
  pd: {
    baseUrl: 'http://pd.base.com',
    ossUrl: 'http://pd.oss.com'
  }
};

// 导出对应环境的配置项
export default envConfig[env];
project.config.json
{
  "description": "项目配置文件",
  "packOptions": {},
  "setting": {},
  "compileType": "miniprogram",
  "libVersion": "2.19.4",
  "appid": "wx6dd8sads8adysad8ase2", // 通过webpack修改json内容,更新appid的值
  "projectname": "miniprogram",
  "condition": {},
  "editorSetting": {}
}

启动命令

// 命令添加env参数,test、dev、pd
npm run build --env=test

启动后,命令窗口会继续监听scss、less文件变更,热更新到对应wxss文件文章来源地址https://www.toymoban.com/news/detail-503462.html

到了这里,关于webpack编译微信小程序的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • [微信小程序] 认识微信小程序及开发环境搭建

      微信公众平台首页 https://mp.weixin.qq.com   微信公众平台测试帐号系统 https://open.weixin.qq.com/connect/qrconnect?appid=wx39c379788eb1286ascope=snsapi_loginredirect_uri=http%3A%2F%2Fmp.weixin.qq.com%2Fdebug%2Fcgi-bin%2Fsandbox%3Ft%3Dsandbox%2Flogin   1、微信公众平台提供的帐号模式   2、各类型帐号的应用场景 餐厅

    2024年02月08日
    浏览(49)
  • 【微信小程序】如何上传uniApp开发的微信小程序?

    微信开发者工具下载链接 Hbuilder X下载链接 扫码 选中账号 登录成功: ps: 如果之前没有权限但是已经登录此账号,需要在获取到权限后重新登录一次❗❗ ps: 不选中 运行时是否压缩代码 有可能代码包不包含插件大小过大,导致上传失败❗❗ 小程序性能优化指南 操作1 操作

    2024年02月09日
    浏览(189)
  • 在uniapp开发编译成小程序时,模板编译错误Module build failed (from ./node_modules/@dcloudio/webpack-uni-mp-loader/lib/

    解决方案:应该是你的ifdef 和 endif不匹配。你自己看看你的代码,是不是有的地方只有一个endif或者只有ifdef,或者说写错了,检查下。我的就是少了endif. 希望我的解决方案能帮到你

    2024年02月16日
    浏览(51)
  • 微信小程序:实现微信小程序应用首页开发 (本地生活首页)

    小程序应用页面开发 1、创建项目并配置项目目录结构 创建项目我相信大家都会,不会的可以csdn搜索即可 这里我们需要对项目目录进行修改配置 在 app.json 文件中的 pages 数组中添加三个页面,如上图所示,然后我们将其他默认的两个进行删除,然后左侧目录 pages 文件夹中的

    2024年02月19日
    浏览(50)
  • 【微信小程序 | 实战开发】配置微信小程序APPID并快速接入

    你是否想要掌握人工智能的最新技术和应用?你是否想要成为未来社会的创新者和领导者?你是否想要和全球的优秀导师和同学一起学习和交流?如果你的答案是肯定的,那么欢迎来到床长人工智能教程网站,这里是你实现梦想的起点! 个人名片: 🐼 作者简介:一名大一在

    2024年01月24日
    浏览(63)
  • 前端开发——微信小程序

    使用的开发平台为——微信开发者工具(点击此处链接)  依次点击【工具】-【下载】-【稳定版更新日志】,找到适合的版本,进行下载安装。 注册微信小程序(点击注册链接),注意注册的是”小程序“。 根据注册提示完成后,进入以下界面: 在侧边栏点击【开发】-

    2024年02月03日
    浏览(51)
  • 微信小程序 - 云开发

    小程序·云开发是微信团队联合腾讯云推出的专业的小程序开发服务。 开发者可以使用云开发快速开发小程序、小游戏、公众号网页等,并且原生打通微信开放能力。 开发者无需搭建服务器,可免鉴权直接使用平台提供的API进行业务开发 小程序 云开发又简称tcb,是微信官方

    2024年04月08日
    浏览(45)
  • 微信小程序云开发

    1.小程序云开发,让前端程序员拥有后端的能力 2.包含:云函数(nodejs)、云数据库(mogodb)、云存储 3.前端写好函数-上传到云服务器 实现自定义云部署 4.前端去调用云函数,间接通过云函数对数据库的操作 5.前端-全栈 1.创建集合 2.添加记录   1.云id 来自云开发-概览-环境

    2024年02月04日
    浏览(43)
  • 微信小程序云开发|基于微信小程序实现房产中介平台系统

    作者主页:编程千纸鹤 作者简介:Java、前端、Python开发多年,做过高程,项目经理,架构师 主要内容:Java项目开发、毕业设计开发、面试技术整理、最新技术分享 收藏点赞不迷路  关注作者有好处 文末获得源码 项目编号:BS-XCX-012 语言环境:微信小程序 开发工具:微信开

    2024年04月25日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包