npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@wecity/anim

v1.0.3

Published

mini-program develop framwork

Downloads

3

Readme

Anim 小程序开发框架

介绍

Anim 框架是基于原生小程序 Mina 框架开发的,采用 rollup 打包,只需要引入 anim.js 即可快速使用。

特点:

  1. 基于小程序 runtime 的增强型开发框架,无需引入各类编译环境,开箱即用。
  2. 可兼容原生使用,无需对项目进行大改,按需使用即可。
  3. 补充多种原生小程序开发框架缺失功能,提高大型工程化项目的可维护性,让开发更省心。
  4. 引入文件大小仅为 5 kb。

使用

小程序 npm 方式引入

  1. 小程序项目目录中执行命令安装 gnpm 包:
npm i @wecity/anim
  1. 点击开发者工具中的菜单栏:工具 --> 构建 npm
  2. 点击开发者工具中的菜单栏:设置 --> 项目设置 --> 勾选“使用 npm 模块”选项
  3. 构建完成后即可使用 js 中引入:
// app.js
const Anim = require('@wecity/anim')

App({
  onLaunch() {
    this.Anim = Anim
  }
})


// pages/index/index.js

// 可以使用增强型 Anim.Page
const { Anim } = getApp()
Anim.Page({
  data: {},
  computed: {}
})

能力

计算属性 Computed

模板内的表达式非常便利,但是设计它们的初衷是用于简单运算的。在模板中放入太多的逻辑会让模板过重且难以维护。巧妙利用 computed 方法,可以让整体代码更简洁清晰。

计算属性是基于它们的响应式依赖进行缓存的,只在相关响应式依赖发生改变时它们才会重新求值,开发者不需要关注依赖的数据是何时更新的。

Anim.Page({
  data: {
    a: 1
  },
  computed: {
    // 需要从这里取 data 数据
    b(data) {
      return data.a + 2
    }
  }
})

监听 Watch

当你有一些数据需要随着其它数据变动而变动时,可以用 watch 监听数据的变化,然后执行一些逻辑。

Anim.Page({
  data: {
    a: 1
  },
  watch: {
    a(newVal) {
      console.log('a', newVal)
    }
  }
})

状态管理

store 可以进行全局状态管理,使得所有使用该 Store 数据的地方都会被统一通知并更新。

// store 文件
import Anim from '@wecity/Anim'

const counter = {
  // state 定义数据
  state: {
    count: 0
  },
  // actions 定义操作
  actions: {
    updateCount(newCount) {
      this.state.count = newCount
    }
  }
}

// 全局装载 Store
Anim.store.install(counter, 'counter')
Anim.Page({
  // 数据会挂载到 this.data.$state 上
  // 操作会挂载到 this.$actions 上
  store: (store) => {
    return {
      counter: store.counter
    }
  },

  addOne() {
    this.$actions.counter.updateCounter(this.data.$state.counter.count + 1)
  }
})

混入 Mixin

混入 (mixin) 可以帮助开发者更好的组织页面代码逻辑,抽象出可复用的逻辑,并分发到各个页面内。当页面使用 mixins 功能时,会将配置选项按一定的规则和页面的配置项进行合并。

支持全局混入,可以让全局共享配置。

const myMixin = {
  onLoad() {
    this.showMessage()
  },
  showMessage() {
    console.log('global show Message')
  }
}
Anim.Page.mixin(myMixin)

支持当前页面混入

const myMixin = {
  onLoad() {
    this.showMessage()
  },
  showMessage() {
    console.log('show Message')
  }
}
Anim.Page({
  mixins: [myMixin],
  onLoad() {
    console.log('show another message')
  }
})

setData

代理原生 setData 方法,并在此之上实现数据 diff,在现有的小程序架构上,精简 setData 的数据,加快小程序数据传输和渲染。

考虑到小程序框架都是基于可 JSON 序列化的数据格式进行传输的,所以数据的 diff 方法也是基于 JSON DIFF 进行判断,最终筛选出哪些需要修改的数据。

也支持 Object Path 模式。

Anim.Page({
  data: {
    bigData: []
  },
  onLoad() {
    // 自动做 diff 数据
    this.setData({
      bigData: bigData
    })
  }
})

路由增强

更加符合前端路由库的方法集成。后续可考虑在前端层维护一个路由栈,可以除了后退还可以支持前进等需求。URL 和参数不再需要手动拼装,舒服使用。并且参数支持更加复杂的解析,支持多层嵌套,数组参数。提高小程序开发的便利性。

API 增强

所有的方法都是 Promise 化。

this.$router.navigateTo({ path: string, query: Object}).then(resolve)
this.$router.navigateBack(delta: number).then(resolve)
this.$router.redirectTo({ path: string, query: Object}).then(resolve)
this.$router.reLaunch({ path: string, query: Object}).then(resolve)
this.$router.switchTab({ path: string, query: Object}).then(resolve)

支持复杂的 query 数据

微信小程序暂时不支持复杂的 query 解析,在 Anim 框架下重新对 URL 做了解析,支持多层嵌套模式和数组参数。

// index.js
Anim.Page({
  onLoad() {
    this.$router.navigateTo({
      path: '/pages/another/another',
      query: {
        a: { b: { c: 3 }},
        d: [1, 2, 3],
        e: [{key: 'val'}, {key: 'val'}]
      }
    })
  }
})

// another.js
Anim.Page({
  onLoad() {
    // 可以获取复杂数据
    console.log(this.$route.query)
  }
})

突破小程序 10 层限制

通过 Anim 维护的路由栈,还可以突破 10 层限制,超过十层路由时自动通过 Redirect 方法来进行路由跳转。

路由响应

路由数据会存放到 this.data.$route 中,方便 UI 使用。

<view>{{$route.query.id}}</view>