{"id":16433306,"url":"https://github.com/tarsisexistence/monoreact","last_synced_at":"2025-03-16T17:36:01.647Z","repository":{"id":36991497,"uuid":"237398907","full_name":"tarsisexistence/monoreact","owner":"tarsisexistence","description":"📦 React workspaces implementation","archived":false,"fork":false,"pushed_at":"2024-10-19T05:12:45.000Z","size":15127,"stargazers_count":19,"open_issues_count":23,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2024-10-19T11:43:38.416Z","etag":null,"topics":["cli","cli-app","command-line-interface","create-react-app","microfrontend","monorepo","monorepos","monorepository","react","react-app","react-applications","react-boilerplate","react-starter","rollup","rollupjs","typescript","typescript-library","workspace","workspaces","yarn"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tarsisexistence.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-01-31T09:32:38.000Z","updated_at":"2024-08-27T16:07:54.000Z","dependencies_parsed_at":"2024-01-27T17:30:38.235Z","dependency_job_id":"dc4513fa-1ad1-4b86-839e-c546f969ca55","html_url":"https://github.com/tarsisexistence/monoreact","commit_stats":{"total_commits":1984,"total_committers":7,"mean_commits":"283.42857142857144","dds":0.4571572580645161,"last_synced_commit":"1bd40a49c56a5cca02d4d29cc749c228a8cca5bf"},"previous_names":["maktarsis/re-space","tarsisexistence/monoreact","tarsinzer/monoreact"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tarsisexistence%2Fmonoreact","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tarsisexistence%2Fmonoreact/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tarsisexistence%2Fmonoreact/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tarsisexistence%2Fmonoreact/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tarsisexistence","download_url":"https://codeload.github.com/tarsisexistence/monoreact/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":221666415,"owners_count":16860415,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cli","cli-app","command-line-interface","create-react-app","microfrontend","monorepo","monorepos","monorepository","react","react-app","react-applications","react-boilerplate","react-starter","rollup","rollupjs","typescript","typescript-library","workspace","workspaces","yarn"],"created_at":"2024-10-11T08:45:43.156Z","updated_at":"2024-10-27T11:01:35.043Z","avatar_url":"https://github.com/tarsisexistence.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"### What is it\n\nThis is an advanced workspace implementation for React projects.\n\n**Monoreact** includes the following features:\n\n- develop regular react apps\n- scaffold React projects\n- build JavaScript, TypeScript, React libraries\n- implement monorepos, workspaces, submodules\n- workspace, submodules management\n- efficient bundling (rollup)\n- workspace dependency awareness (topological sorting)\n\n\u003cbr/\u003e\n\n### What problems does it solve\n\n- [microfrontend](https://martinfowler.com/articles/micro-frontends.html)\n- [monolithic repository, monorepo](https://www.perforce.com/blog/vcs/what-monorepo)\n- [workspaces](https://www.smashingmagazine.com/2019/07/yarn-workspaces-organize-project-codebase-pro/)\n- [submodules](https://chrisjean.com/git-submodules-adding-using-removing-and-updating/)\n\n\u003cbr/\u003e\n\n### Motivation\n\nThe primary motivation was not to be tied to existing solutions of vendors, so as not to get into vendor lock.\n\nNevertheless, I recommend considering alternative solutions:\n\n- [nx/react](https://nx.dev/react) - a super powerful tool that can do everything, but turned out to be redundant for me because of vendor lock.\n- [lerna](https://github.com/lerna/lerna) - completely threw this idea away with existing yarn workspaces and git submodules scripts.\n- [tsdx](https://github.com/jaredpalmer/tsdx) - a great solution but for narrow tasks.\n\n\u003cbr/\u003e\n\n### What can it do now\n\n- scaffold and build React applications with [create-react-app](https://create-react-app.dev/)\n- bundle packages with [rollup](https://rollupjs.org/guide/en/)\n- use advanced CLI [monoreact](https://github.com/tarsinzer/monoreact/tree/master/cli)\n- save your time with [typescript](https://www.typescriptlang.org/) (with the option not to use it)\n- symlinking [yarn workspaces](https://classic.yarnpkg.com/en/docs/workspaces)\n- enjoy configured testing ([jest](https://jestjs.io/)), formatting ([prettier](https://prettier.io/)), linting ([eslint](https://eslint.org/) + [stylelint](https://stylelint.io/)), git hooks ([husky](https://github.com/typicode/husky) + [lint-staged](https://github.com/okonet/lint-staged))\n\n\u003cbr/\u003e\n\n### Powerful CLI\n\nBuilt-in documentation. Type in the console `monoreact --help` to see information about all possible commands and `monoreact [command] --help` their description.\n\nThe following options are now available:\n\n#### Scaffolding\n\n- **new**. Creates a container/host/shell application. This is the initial scaffolding of the entire application.\n- **generate** a new package (submodule): basic, react. Monoreact creates a distribution of responsibility. Not all packages must deal with react components. Sometimes you want to build plain JavaScript/TypeScript libraries.\n- **add** a new feature (available options: docz, playground (run packages locally inside the package workspace)). Monoreact allows you to not generate components with all the things that may not necessarily need in each package.\n\n#### Execution\n\n- **build** and **watch** your package with a modern rollup module bundler. Rollup is the best choice for building independent libraries due to efficient tree-shaking and fast compilation.\n- **test** and **lint** your package with Jest and eslint. These built-in packages are crucial for increasing and maintaining the quality of built libraries.\n- **install** dependencies. This option provides workspace dependency management. If you are running **install** inside some package, it'll add these dependencies as \"peer\" and add them to the root.\n\n#### Submodules\n\nIt is quite challenging for managing git submodules. You have to perform many actions to make a simple task happen, and this is what scares people off from using submodules. In turn, Monoreact offers user-friendly control through commands, which increases understanding and speed of interaction with git submodules.\n\n- **checkout**\n- **fetch**\n- **init**\n- **pull**\n\n#### Workspaces\n\nMonoreact offers a much efficient alternative to the \"yarn workspaces\". It analyzes your dependencies between workspaces and runs them in the desired sequence and in parallel, when necessary and appropriate.\n\n- **watch** (parallel)\n- **build** (parallel)\n- **test**\n- **lint**\n\n#### Migration\n\nThis section is responsible for scripts that will help to adapt the basic state of the package to the desired one.\n\n- **detach**. Detach your package from the workspace. Just in case you plan to use the package as a submodule to run it independently outside the host workspace.\n\n\u003cbr/\u003e\n\n### Contributing\n\nCheck out [contributing guideline](https://github.com/tarsinzer/monoreact/blob/master/CONTRIBUTING.md) to familiarize yourself with the general rules of the project, as well as to figure out how to bootstrap the project and make changes correctly.\n\n\u003cbr/\u003e\n\n### License\n\nThis project is [MIT](https://choosealicense.com/licenses/mit/) licensed.\u003cbr/\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftarsisexistence%2Fmonoreact","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftarsisexistence%2Fmonoreact","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftarsisexistence%2Fmonoreact/lists"}