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

less.js

v3.0.5

Published

A write less, do more MVC framework based on Koa.

Downloads

937

Readme

简介

版本

  • v3.0.1 [2019-10-30] 重构、性能优化、废除对视图层(view)的支持;
  • v2.0.9 [2019-04-11] 性能优化;
  • v2.0.0 [2019-02-15] 取消内置第三方 SDK;
  • v1.1.4 [2018-12-29] 支持 URL Rewrite;
  • v1.1.0 [2018-12-27] 支持 Redis 数据库,通过 ORM 框架 jugglingdb 操作 Redis;
  • v1.0.9 [2018-12-23] 支持同步 MySQL 数据库模型;
  • v1.0.8 [2018-12-20] 支持根据 controllers 目录结构自动生成对应路由,无需手动配置路由;
  • v1.0.5 [2018-12-10] 取消 koa-jwt 中间件,在 controller 基础类中进行 JWT 校验;

待办

  • 同步 MySQL 数据至 Redis;

示例

示例代码

请查看 example 文件夹。

管理后台代码

请访问 https://github.com/zhaotoday/iview

线上示例

请访问 https://admin.cmsx.cn/

账号:admin
密码:123456

注:按 F12 打开 Chrome 开发者工具查看接口请求。

运行

Node.js 版本

Koa2 使用了 async/await 等新语法,请保证 Node.js 版本在 7.6 及以上。

应用配置

修改 package.json,将 {app-name} 改成自己的:

{
  ...,
  "scripts": {
    "stop": "pm2 stop {app-name}"
  },
  ...
}

修改 processes.json,将 {app-name} 改成自己的:

{
  "apps": [
    {
      "name": "{app-name}",
      ...
    },
    ...
  ]
}

命令

# 安装 pm2 到全局
$ npm install -g pm2

# 安装 less.js
$ npm install --save less.js

# JS 代码校验
$ npm run eslintfix
$ npm run eslint

# 开发调试
$ npm run dev

# 启动项目
$ npm run start:dev

# 同步数据库模型
$ npm run sync-models:dev

# 停止项目
$ npm run stop

注::dev 表示执行命令时调用的是开发环境的配置。dev 表示开发环境,test 表示测试环境,beta 表示预生产环境,prod 表示生产环境。

目录结构

整体目录结构

├─ src                     源码
│  ├─ app                  业务代码
│  │  ├─ controllers       控制器:用于解析用户输入,处理后返回相应的结果
│  │  ├─ models            模型  :用于定义数据模型
│  │  └─ services          服务  :用于编写业务逻辑层,比如连接数据库,调用第三方接口等
│  │
│  ├─ config               配置
│  ├─ extends              扩展
│  ├─ middlewares          中间件
│  ├─ public               静态资源
│  ├─ redis                Redis 数据库
│  ├─ router               URL 路由
│  ├─ utils                工具库
│  └─ index.js             入口:用于自定义启动时的初始化工作,比如启动 https,调用中间件、路由等
│  
├─ .eslintrc               eslint 配置文件
├─ nodemon.json            nodemon 配置文件
├─ package.json            npm 配置文件
├─ processes.json          pm2 配置文件

配置(config)目录结构

├─ config                  配置
│  ├─ base.js              基础配置
│  ├─ development.js       开发环境配置
│  ├─ test.js              测试环境配置
│  ├─ beta.js              预生产环境配置
│  └─ production.js        生产环境配置

扩展(extends)目录结构

├─ extends                 扩展
│  ├─ controller.js        对控制器进行扩展
│  ├─ helpers.js           对辅助函数进行扩展
│  ├─ initialize.js        初始化
│  └─ service.js           对服务进行扩展

控制器(controllers)目录结构

├─ controllers          控制器
│  └─ v1                接口版本
│     ├─ admin          管理接口
│     │  ├─ actions     动作类接口
│     │  │
│     │  ├─ articles.js articles 接口控制器
│     │  └─ files.js    files 接口控制器
│     │
│     ├─ public         公开接口(无需鉴权即可调用)
│     │
│     └─ some-app       某个应用的接口

扩展

对 Koa.js 的一些扩展,用 $ 前缀命名,与 Koa.js 内置对象做区分。

app.$config:配置
app.$module:加载内置模块
app.$helpers:辅助函数
app.$resources:生成 RESTful 规范的路由
app.$model:公用模型对象
app.$Service:服务基类
app.$Controller:控制器基类
app.$models:模型集合
app.$services:服务集合
app.$controllers:控制器集合

如扩展辅助函数,请新建 src/extends/helpers.js:

module.exports = app => {
  return {
    myFunc () {}
  }
}

示例代码

模型

src/app/models/articles.js

module.exports = app => {
  const { STRING, TEXT, INTEGER } = app.$Sequelize

  return app.$model.define('articles', {
    id: {
      type: INTEGER(10).UNSIGNED,
      primaryKey: true,
      autoIncrement: true,
      allowNull: false,
      comment: 'ID'
    },
    title: {
      type: STRING(200),
      allowNull: false,
      comment: '标题'
    },
    content: {
      type: TEXT('long'),
      comment: '内容'
    }
  })
}

服务

src/app/services/articles.js

module.exports = app => {
  return class extends app.$Service {
    constructor () {
      super()

      this.model = app.$models.articles
    }
  }
}

控制器

src/app/controllers/api/v1/public/articles.js

module.exports = app => {
  const service = app.$services.articles

  return class extends app.$Controller {
    async index (ctx, next) {
      ctx.send({
        status: 200,
        data: await service.find({ offset: 0, limit: 10 })
      })
    }
  }
}

路由

src/router/index.js

const router = require('koa-router')()

module.exports = app => {
  router.get('/', app.$controllers.web.home.index)
  router.get('/articles/:id?', app.$controllers.web.articles.index)

  app.use(router.routes()).use(router.allowedMethods())
}

参考

文档

文章

MySQL

Redis

安全

其他参考