利用 Webpack 实现小程序多项目管理

栏目: 编程工具 · 发布时间: 6年前

内容简介:这是单个小程序的基本目录结构,没问题当一个项目有多个小程序的时候,好像也没问题当多个小程序都用到同一个组件 com3 时,小哥发现代码没法复用,需要复制黏贴
  • 小程序杂,放一个项目方便管理
  • 小程序多,代码要能够复用
  • 团队开发,代码风格要统一

码畜小哥开始建项目

这是单个小程序的基本目录结构,没问题

利用 Webpack 实现小程序多项目管理

当一个项目有多个小程序的时候,好像也没问题

利用 Webpack 实现小程序多项目管理

当多个小程序都用到同一个组件 com3 时,小哥发现代码没法复用,需要复制黏贴

利用 Webpack 实现小程序多项目管理

思考了一下,那么把组件目录移到外面,这样不就可以复用了吗?

利用 Webpack 实现小程序多项目管理

感觉很好,小哥这时在微信开发者 工具 打开 demo1,发现报错了

利用 Webpack 实现小程序多项目管理

原来小程序是以当前项目作为根目录,components 目录已经不在 demo1 目录范围内,所以是引用不到的

小哥想到了 Webpack

1. 整理目录

  • apps/:存放全部小程序
  • build/:存放构建脚本
  • common/:存放公共方法
  • components/:存放公共组件
  • styles/:存放公共样式
  • templates/:存放公共模板

大概长这样

利用 Webpack 实现小程序多项目管理

2. 编写构建脚本

package.json

script: {
  "dev": "webpack --config build/webpack.config.js"
}
复制代码

build/webpack.config.js

思路就是利用 CopyWebpackPlugin 同步指定的文件到小程序目录下

const CopyWebpackPlugin = require('copy-webpack-plugin')
const utils = require('./utils')

// 获取 apps 目录下的小程序并指定公共文件目录命名
function copyToApps(dir) {
  let r = []

  utils
    .exec(`cd ${utils.resolve('apps')} && ls`)
    .split('\n')
    .map(app => {
      r.push({
        from: utils.resolve(dir),
        to: utils.resolve(`apps/${app}/_${dir}`)
      })
    })

  return r
}

module.exports = {
  watch: true,

  // 监听入口文件,保存便会刷新
  entry: utils.resolve('index.js'),

  output: {
    path: utils.resolve('.tmp'),
    filename: 'bundle.js'
  },

  plugins: [
    // 同步指定的公共文件到所有小程序目录下
    new CopyWebpackPlugin([
      ...copyToApps('styles'),
      ...copyToApps('common'),
      ...copyToApps('templates'),
      ...copyToApps('components')
    ])
  ]
}
复制代码

3. 启动本地开发

npm run dev
复制代码
利用 Webpack 实现小程序多项目管理
利用 Webpack 实现小程序多项目管理

现在公用的代码已经自动同步到小程序目录下,以下划线开头,当改动公共代码也会自动同步给小程序调用

调用方式长这样

import utils from './_common/utils'
import com3 from './_components/com3'
复制代码
@import './_styles/index.wxss';
复制代码
<import src="./_templates/index.wxml" />
复制代码

代码风格校验

package.json

script: {
  "lint": "eslint apps/"
}
复制代码

.eslintrc.js

module.exports = {
  extends: 'standard',

  // 将小程序特有的全局变量排除下
  globals: {
    Page: true,
    Component: true,
    App: true,
    getApp: true,
    wx: true
  },

  rules: {
    'space-before-function-paren': ['error', 'never'],
    'no-unused-vars': [
      'error',
      {
        // 小程序还没支持 ES7,这个是用来兼容 async/await
        varsIgnorePattern: 'regeneratorRuntime'
      }
    ]
  }
}
复制代码

然后借助 husky 在每次 git commit 前执行校验

script: {
  "precommit": "npm run lint"
},

devDependencies: {
  "husky": "^0.14.3"
}

复制代码

清理

最后小哥还加了个清理命令,便于重新生成公共代码

package.json

script: {
  "clean": "node build/clean.js"
}

复制代码

build/clean.js

const rimraf = require('rimraf')
const utils = require('./utils')

function log(dir) {
  console.log(`cleaning ${dir}`)
}

rimraf(utils.resolve('.tmp'), () => log('.tmp'))

utils
  .exec(`cd ${utils.resolve('apps')} && ls`)
  .split('\n')
  .map(app => {
    ;[
      `${app}/_styles`,
      `${app}/_common`,
      `${app}/_templates`,
      `${app}/_components`
    ].map(m => {
      rimraf(utils.resolve(`apps/${m}`), () => log(m))
    })
  })

复制代码

以上所述就是小编给大家介绍的《利用 Webpack 实现小程序多项目管理》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

网络素养

网络素养

[美]霍华德·莱茵戈德 / 张子凌、老卡 / 译言·东西文库/电子工业出版社 / 2013-8-1 / 49.80元

有人说Google让我们变得更笨,有人说Facebook出卖了我们的隐私,有人说Twitter将我们的注意力碎片化。在你担忧这些社会化媒体让我们变得“浅薄”的时候,有没问过自己,是否真正地掌握了使用社会化媒体的方式? 这本书将介绍五种正在改变我 们这个世界的素养:注意力、 对垃圾信息的识别能力、参与力、协作力和联网智慧。当有足够多的人学会并且能够熟练的使用这些技术,成为真正的数字公民后。健康......一起来看看 《网络素养》 这本书的介绍吧!

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具