Hi all, In API Manager 3.0.0 we have mainly 3 SPA applications which are Publisher[1], Store[2], and Admin[3] apps. We have structured the SPA apps in a way that, an App consists of 2 main elements, Data models and React components. Data models are used to fetch data from REST APIs and representing UI models(such as logged in user[4]). The React components are used to render the UI using aforementioned data models. In the current implementation of apps, We had to repeat some of the data models and react components in all 3 apps due to inability to share js modules between SPA apps.
Because each app is located in *carbon-apimgt/features/apimgt/* directory and if we need to refer react component in Store app from Publisher app, we have to import it as *'../../../../org.wso2.carbon.apimgt.publisher.feature/src/main/resources/publisher/source/src/app/components/Login/Login.js'* or use NPM dependency as > ' > *../../../../org.wso2.carbon.apimgt.publisher.feature/src/main/resources/publisher/source/* > ' which make it hard maintainability and share components with other repositories/products other than "carbon-apimgt". To overcome this issue, we could use public NPM registry to host these sharable js modules as an NPM package and use that package as a dependency in other places. When publishing common React components and Data models we could 1. Make a new feature named *org.wso2.carbon.apimgt.spa.commons.feature* in *carbon-apimgt * repo and push the npm package located in that feature into npm registry 2. Create separate GitHub repository like *carbon-apimgt-spa-commons *and organize all the commonly used React components and other JS modules into that GitHub repository and publish it to npm registry as-is. with the method[1] we could use the same carbon-apimgt GitHub repo and use a subdirectory of it to hold shareable js modules(like the @wso2-dashboards/widget[5] package). But with this approach fixing an issue in commons module require sending fixes to the carbon-apimgt repository. With the [2] approach we could use separate GitHub repo associated with npm package and setup auto release for npm package per commit similar to what we are doing with other repositories. Please give your suggestion and ideas on this, what would be the better approach for publishing common components/modules to npm. And also, for npm package name we could use a name like *@wso2-apimgt/commons *with the scoping. Please give your suggestions for a better package name as well J. Thanks ~KasunTe [1]: https://github.com/wso2/carbon-apimgt/tree/master/features/apimgt/org.wso2.carbon.apimgt.publisher.feature/src/main/resources/publisher [2]: https://github.com/wso2/carbon-apimgt/tree/master/features/apimgt/org.wso2.carbon.apimgt.store.feature/src/main/resources/store [3]: https://github.com/wso2/carbon-apimgt/tree/master/features/apimgt/org.wso2.carbon.apimgt.admin.feature/src/main/resources/admin [4]: https://github.com/wso2/carbon-apimgt/blob/master/features/apimgt/org.wso2.carbon.apimgt.publisher.feature/src/main/resources/publisher/source/src/app/data/User.js [5]: https://www.npmjs.com/package/@wso2-dashboards/widget -- *Kasun Thennakoon* Software Engineer WSO2, Inc. Mobile:+94 711661919
_______________________________________________ Architecture mailing list [email protected] https://mail.wso2.org/cgi-bin/mailman/listinfo/architecture
