old-puppets
v1.1.1
Published
This module is a Spring-like container that implements the inversion-of-control pattern. (not generalized yet, just for SK ECOTrol project so far)
Downloads
9
Readme
Introduction
'old-puppets' is a Spring-like container that implements the inversion-of-control pattern. It binds all annotated components in some certain contexts WITHOUT import
.
WARN
This module is not generalized yet. It is just for SK ECOTrol project so far.
read annotations and build a application context
const { buildApplicationContext } = require("old-puppets");
buildApplicationContext();
escape annotations
{
test: /\.js$/,
use: [
{
loader: require.resolve("old-puppets/loaders/annotationLoader")
}
]
}
annotationLoader
should be handled before the babel loader.
I am considering a plug-in instead of this loader.
@ComponentScan
import React, { Component } from "react";
import ComponentScan from "old-puppets/annotations/ComponentScan";
@ComponentScan
export default class Root extends Component {
render() {
applicationContext.js
will be generated in the same directory where the component with @ComponentScan
is.
the form of applicationContext.js
import Sample1 from './Sample1.js';
import Sample2 from './Sample2.js';
const mapper = [
{ menuNo: 1, component: Sample1 },
{ menuNo: 2, component: Sample2 },
]
export default mapper;
This js file might be stale because it is refreshed at build time.
Component names are determined by thier file names, not (a function).name. So each of them should be UNIQUE.
use applicationContext.js
// eslint-disable-next-line
import applicationContext from "./applicationContext";
eslint-disable-next-line
should be commented because applicationContext.js
does not exist before its building. This interface WILL BE UPDATED to annotation use.
just put an annotation on the class in a component to add the component to applicationContext.js
import React, { Component } from "react";
import MenuNo from "old-puppets/annotations/MenuNo";
@MenuNo(1)
export default class Sample1 extends Component {
render() {
return (
decorators out of class
// @MenuNo(3)
export default hoc(AnyOne);
This line-comment is regarded as annotated.
or
// @MenuNo(4)
let Aaa = props => <Hi mom={props.sorry} />
License
MIT © wooheemusic