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 🙏

© 2025 – Pkg Stats / Ryan Hefner

friday-core

v0.0.3

Published

`friday-core` 是`friday`的纽带,它连接了应用配置、应用视图等一系列,又打散了业务。

Readme

friday-core

friday-corefriday的纽带,它连接了应用配置、应用视图等一系列,又打散了业务。

安装

$ npm install friday-core --save 

or 

$ yarn add friday-core --save 

example

import Friday from 'friday-core'
import configurations from 'src/configurations'

const app = new Friday({
  onInjectConfigBefore() {},
  onInjectConfigAfter() {},
  onInjectRouterAfter(configuration) {},
  onStarted(configuration) {}
})

// 注入配置
app.injectConfigurations(configurations)

// api 模块插件
app.use(require('./middlewares').default)

// 注入路由
app.injectRouters(require('./App').default)

// 启动
app.start('#root')

friday-core将应用划分为三个模块,配置、插件、应用业务。

有以下特性

  • 支持多配置,friday-core根据whiteHosts自动规划配置作为当前配置,便于环境拆分。
// configuration.dev
import { IConfiguration } from 'friday-core'

const whiteHosts = [
  'localhost:3000'
]

const configuration: IConfiguration = {
  whiteHosts,
  publicUrl: {
	BASE_API_URL: 'http://127.0.0.1:3000/api',
  }
}
export default configuration
// configurations.ts
import configuration_dev from './configuration.dev'
import configuration_pro from './configuration.pro'

const configurations = [
  configuration_dev,
  configuration_pro,
]
export default configurations
  • 业务中间件灵活插拔。我们可以选择给friday注册一些中间件,便于抽象和扩展一些业务,friday-core内置了一些常规中间件
import { GlobalState_middleware } from 'friday-core'

export const { middleware: global_middleware, useGlobalContext } = GlobalState_middleware({ 
  userInfo: {} as IUserInfo,
  globalLoading: false
})

export default global_middleware

上面的中间件提供了管理全局变量的能力,我们可以自定义中间件,来让业务。

tips: 我们可以通过中间件来管理friday-async的全局配置。

  • 生命周期钩子。提供三方插件和应用的配置的纽带 我们可以在生命周期钩子中,来开启一些三方库。
// 开启站点监测,将分发当前环境的配置
const app = new Friday({
  onStarted(configuration) {
	const { sentry } = configuration
	sentry && sentryLoader(configuration)
  }
})
  • 微服务的生命周期钩子。 friday-core 提供了基于qiankun微服务的生命周期钩子,你可以暴露出去,将friday注册到其他微服务平台内
// 微服务中的slave 需要添加该文件在entry 入口上方,用来添加静态资源地址
import 'friday-micro/lib/public-path'

const lifecycle = app.start('#root')

export const bootstrap = lifecycle.bootstrap
export const mount = lifecycle.mount
export const unmount = lifecycle.unmount

friday-core Api

app = Friday(opts)

创建应用,返回 Friday 实例 opts包含:

  • onInjectConfigBefore() 调用injectConfig之前执行
  • onInjectConfigAfter(configurations) 调用injectConfig之后执行, configurations为当前匹配的config
  • onInjectRouterAfter(configurations) 调用injectRouters之后执行, configurations为当前匹配的config
  • onStarted(config) 调用start之后执行, config为当前匹配的config

app.injectConfigurations(configurations: IConfiguration[])

配置项目configurations, whiteHosts中为匹配目标,多个configuration被匹配,将取第一个

interface IConfiguration {
    whiteHosts: string[]
    publicUrl: {
        [x: string]: any
    }
    router?: {
        baseName: string
    },
    sentry?: boolean
}

configResult = useConfiguration() or getConfiguration()

configResult 与注入的configuration有所不同,多了两个属性:

interface IResponseConfiguration extends IConfiguration {
    // 传入router.baseName后,暴露的history
    history: History
    // 当前执行环境
    NODE_ENV: string
}

friday-core支持不同方式获取configuration useConfigurationreact组件内使用,而getConfiguration()可以在非react组件内使用

app.use(middleware: IMiddleware)

friday支持中间件,通过中间件结构部分业务,目前friday提供了部分封装好的中间件


import { GlobalState_middleware } from 'friday-core'

const {middleware, useGlobalContext } = GlobalState_middleware({userInfo: { name: 'friday' }})

app.use(middleware)

app.injectRouters(Router: React.FC)

配置项目的组件入口,Router如下:

const App = ({ history }) => {
  return (
    <Router history={history}>
      <Switch>
        <Route path='/' component={Home} />
      </Switch>
    </Router>
  )
}

export default App

app.injectRouters(App)

microLsifecycle= app.start(container: string)

启动项目,container为一个DOM元素的ID

microLsifecycle 为项目的微服务暴露函数,在微服务的子应用应该将其暴露出来,包含以下函数。

  • bootstrap
  • mount
  • unmount
  • render