meteoroids - meteors
¿Cómo bifurcar un paquete Meteorite existente de forma limpia? (4)
Estoy tratando de encontrar la manera mejor / más limpia de incluir un paquete existente en Atmosphere dentro de un proyecto. Me encontré con algunas ocasiones en las que un paquete existente necesitaba algunas modificaciones y me vi obligado a hacerlo.
Por lo que sé, existen las siguientes opciones. Desafortunadamente, todos estos tienen sus propios problemas y todavía tengo que encontrar la solución perfecta. meteor-router
como ejemplo:
1. Simplemente copie los archivos del paquete en su carpeta de paquetes
Pasos:
- eliminar
packages/router/.git/
- edita los
packages/.gitignore
y elimina la línea ''enrutador'' - quitar el enrutador de su
smart.json
- Agregue
packages/router
a su repositorio de proyectos y confirme - ahora haga cambios (de esta manera, su confirmación inicial es una versión limpia y usted puede resolver lo que ha cambiado usted mismo)
Ventajas:
- fácil de lograr y entender
- Todo el código en el que confía se puede encontrar en el repositorio de su proyecto
Desventajas:
- Pierdes toda la historia de los repositorios originales.
- es difícil actualizar a una versión más nueva
- Es difícil aportar tus cambios al proyecto original.
¡Ni siquiera consideres esto para ninguno de los paquetes más simples!
2. Tenedor en github, entonces ...
Para bifurcar un paquete en github, puede revisar su archivo smart.lock
para ver qué repositorio se está utilizando. Vaya a la página github de ese repositorio y bifurque.
A continuación, tienes tres opciones:
2a. Añadirlo como un submódulo de git.
Más información sobre los submódulos de git: http://git-scm.com/book/en/Git-Tools-Submodules
Pasos:
- Vea el enlace anterior sobre cómo iniciar / crear / actualizar un submódulo
- Retire el paquete de su
smart.json
Ventajas:
- Las versiones de submódulos están conectadas a su proyecto.
- Los cambios son recogidos inmediatamente.
Desventajas:
- Todos los desarrolladores necesitan ejecutar
git submodule init
la primera vez yupdate
para actualizar - Debe tener en cuenta los problemas con los submódulos al editar el proceso de pago.
- Lea sobre otros temas con submódulos
2b. Edite el smart.json
su proyecto para usar su versión.
Pasos:
- En su
smart.json
, encuentre"router": {}
y agregue"git": "https://github.com/USER/meteor-router.git"
dentro del vacío{}
. - Opcionalmente, agregue una
"branch"
o"tag"
.
Ventajas:
- Aún puedes usar Meteorite para administrar tus paquetes externos
- Trabajará automáticamente para otros desarrolladores y en entornos de implementación.
Desventajas:
- El código en su carpeta de paquetes no es editable, ya que no es un repositorio git
- Meteorite no se actualizará automáticamente a la última versión cada vez que lo ejecute
(Mejora sugerida de Meteorite: permite que los paquetes se instalen en una forma editable, como el pip de Python permite usar el parámetro ''-e'')
2c. Clone fuera de su proyecto y agregue una "path"
a smart.json
Pasos:
- Clona el paquete a un lugar fuera de tu proyecto
- De manera similar a 2b, agregue una
"path"
a susmart.json
para apuntar Meteorite a su pago local
Ventajas:
- Puede editar el paquete a voluntad y Meteor recogerá automáticamente los cambios.
Desventajas:
- Si confirma este
smart.json
, lo más probable es que rompa todos los demás entornos de desarrollo / implementación ...
¿Qué método utilizas? ¿Cómo se resuelven las desventajas de ese método?
Podría haber perdido algunos problemas con estas soluciones.
2b. Edite el smart.json de su proyecto para usar su versión.
Recomendaría esta versión, ya que es la más coherente con la smart.json
se diseñó y smart.json
el smart.json
. mrt update
reflejará correctamente lo último del git repo
, creo.
Hay una respuesta aún más fácil que todas las anteriores. Cree un directorio llamado paquetes en su proyecto y coloque el paquete que desea anular en él. ¡Sencillo!
Ej .: Digamos que desea hacer algunos cambios en accounts-ui-unstyled (que es una accounts-ui-unstyled de accounts-ui ) de meteoro. Haga un clon de git de toda la fuente de meteoros a un repositorio local:
MyMachine:~ theuser$ cd Development/
MyMachine:Development theuser$ git clone https://github.com/meteor/meteor.git
MyMachine:Development theuser$ cp accounts-ui-unstyled ~/Development/MyProject/packages
En tu estructura de proyecto tendrías esto
MyProject
|
-> client
-> lib
-> packages
|
-> accounts-ui-unstyled
-> private
-> public
-> server
-> tests
Cualquier cambio que realice dentro de MyProject / packages / accounts-ui-unstyled ahora anulará el paquete.
Para Meteor 1.0 recomiendo lo siguiente:
Configurar una carpeta de paquetes locales
$ mkdir "$HOME/code/packages"
Agregue la variable de entorno
PACKAGE_DIRS
a su archivo.bashrc
/.zshrc
export PACKAGE_DIRS="$HOME/code/packages"
Tenedor y clonar el repositorio.
$ cd "$HOME/code/packages" $ git clone <yourGithubFork>
Instala el paquete desde tu sistema de archivos.
$ meteor add <packagenamespace>:<packagename>
Utilizo un híbrido de las opciones # 2: smart.json
en un checkout local, pero coloco todos los paquetes, incluidos la aplicación y los paquetes smart extraídos, como submódulos de git en un proyecto principal. Meteorite todavía instala el resto de los paquetes inteligentes en la aplicación. De esta manera, cuando desarrollas los paquetes inteligentes, todo se mantiene constante y puedes mover tu aplicación a Meteorite normal cuando tu fork se fusiona.
Consulte https://github.com/mizzao/CrisisMapping para ver un ejemplo. En mi caso, esos ni siquiera son bifurcaciones, son solo paquetes inteligentes que estoy desarrollando más allá de la última versión de Meteorite.