¿Cómo compartir componentes Reaccionar entre dos aplicaciones Meteor en el mismo repository?

Tengo dos aplicaciones (public-app y admin-app) que comparten algunos componentes de React. Esos componentes compartidos se encuentran en una carpeta common , en la raíz del repository. Entonces digamos que tengo:

 my-app |__admin-app |__client |__imports |__Component.js |__public-app |__common |__ShanetworkingComponent.js 

En Component.js , bash importar ShanetworkingComponent.js haciendo:

import ShanetworkingComponent from '../../../common/ShanetworkingComponent'

… Pero no está funcionando, no puede encontrar el module.

Esto debería ser posible ya que es uno de los enfoques recomendados de la documentation oficial ( https://guide.meteor.com/structure.html#sharing-code ), por lo que cualquier ayuda sería muy apreciada.

Si está utilizando babel para transstackr su código, resuelvo este problema utilizando el complemento de root-import . Puede search este complemento para ayudarlo a requerir que sus files usen la misma syntax para apuntar a la misma carpeta.

Con los complementos de babel, sugeriría search modules-alias o babel-root-import .

alias del module

Con module-alias, su .babelrc se vería así:

 { "presets" : ["es2015", "react"], "plugins": [ [ "module-alias", [ { "src": "./my-app", "expose": "my-app" }, ] ] ], } 

..y podría usar la syntax import ShanetworkingComponent from 'my-app/common/ShanetworkingComponent' *.

import de raíz

O con la import de raíz de su .babelrc sería algo así como:

 { "presets" : ["es2015", "react"], "plugins": [ ["babel-root-import"] ] } 

..y podría utilizar la syntax `importCompartComponent from '~ / my-app / common / ShanetworkingComponent' *.

* siempre que use un file babelrc y que my-app sea ​​la raíz de su proyecto.

Usuarios de Meteor: no olvides poner todos tus files exportados en la carpeta "imports", incluso si se usa a través de un enlace simbólico. Tuve un error de variable indefinida porque Meteor estaba tratando de cargar ansiosamente mis files puestos en mi carpeta common .

Por lo tanto, siga el consejo de @bitten y comience creando el enlace simbólico. Git debería manejar eso bien (cf. ¿Cómo maneja git los enlaces simbólicos? ): ln -s ../common/

Luego, puede usar https://github.com/mantrajs/babel-root-slash-import que en realidad es una bifurcación de babel-root-import para simplificar sus routes de import. (gracias @bitten).