It is also possible to link two npm projects without pushing to central
repo, see https://docs.npmjs.com/cli/link


On Thu, Jan 4, 2018 at 12:00 PM, Kasun Thennakoon <[email protected]> wrote:

> 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
>



-- 
With regards,
*Manu*ranga Perera.

phone : 071 7 70 20 50
mail : [email protected]
_______________________________________________
Architecture mailing list
[email protected]
https://mail.wso2.org/cgi-bin/mailman/listinfo/architecture

Reply via email to