# Compilar y Desplegar

# Compilar

Cuando se completan los proyectos, puedes compilar tu aplicación con solo ejecutar un comando:

# compilar para el entorno de producción
npm run build:prod

# compilar para el entorno de pruebas
npm run build:stage

Después de que el paquete de compilación sea exitoso, la carpeta dist se generará en el directorio raíz, que es la construcción de un archivo empaquetado, generalmente archivos estáticos como ***. js, ***. css, index.html, etc.

Si necesitas una compilación personalizada, como especificar el directorio dist, debes configurarlo a través de outputDir en config.

# Variables de entorno

La configuración de todos los entornos de prueba o variables de entorno formales se encuentra en el archivo .env.xxxx como .env.development.

Todos se inyectan en el contexto global a través de los complementos webpack.DefinePlugin.

¡NOTA!

Las variables de entorno deben comenzar con VUE_APP_. Tales como: VUE_APP_API, VUE_APP_TITLE

Puedes acceder a ellas en el código de tu aplicación:

console.log(process.env.VUE_APP_xxxx)

# Analizar el tamaño del archivo de compilación

Si tu archivo de compilación es grande, puedes optimizar tu código compilando y analizando la distribución del tamaño de los módulos dependientes utilizando webpack-bundle-analyzer.

npm run preview -- --report

Después de ejecutar, puedes ver la distribución de tamaño específico en http://localhost:9526/report.html

TIP

Se recomienda utilizar gzip, después de usarlo, el volumen será solo el 1/3 del original más o menos. También puedes usar Lazy Loading o Code Splitting.

# Publicar

Para la publicación, solo tienes que publicar el archivo estático resultante después de la compilación, que generalmente es el archivo estático en la carpeta dist, en tu cdn o servidor estático. Ten en cuenta que index.html generalmente será una página de entrada para tu servicio de back-end. Es posible que debas cambiar la ruta de importación de la página después de determinar la estática para JS y CSS.

TIP

En el despliegue puedes encontrar que la ruta del recurso es incorrecta, simplemente modifica la ruta del archivo de recurso @/config/index.js.

// los cambios se configuran según tu propia ruta
publicPath: './'

# Enrutador y servidor

En adempiere-vue, el enrutamiento front-end usa vue-router, por lo que tienes dos opciones: browserHistory y hashHistory.

Simplemente hablando, la diferencia entre ellos es el trato con el enrutamiento. hashHistory es procesado por la ruta que sigue de #, la gestión de enrutamiento de front-end a través de HTML 5 History, y browserHistory es similar a nuestra ruta de acceso de página habitual, y no con #, pero debe a través de la configuración del servidor.

Este proyecto utiliza hashHistory de forma predeterminada, por lo que, si tienes # en tu URL y deseas deshacerte de él, debes cambiar a browserHistory.

Modificar el modo en src/router/index.js

export default new Router({
  // mode: 'history' // Necesita soporte de backend
})

TIP

Ver detalles vue-router document

# Desplegar todo el Ecosistema

# Para todos los entornos, debe ejecutar las siguientes imágenes:

docker pull erpya/adempiere-grpc-all-in-one
docker pull erpya/proxy-adempiere-api
docker pull erpya/adempiere-vue
docker pull erpya/adempiere-ecommerce

# Ejecutar Docker Stack

# docker-compose.yaml
version: '3.7'

services:
  grpc-backend:
    image: erpya/adempiere-grpc-all-in-one
    container_name: adempiere-backend
    stdin_open: true
    tty: true
    environment:
      - SERVER_PORT=50059
      - SERVICES_ENABLED=access; business; core; dashboarding; dictionary; enrollment; log; ui; workflow; store; pos; updater;
      - SERVER_LOG_LEVEL=WARNING
      - DB_HOST=postgres_host
      - DB_PORT=5432
      - DB_NAME=adempiere
      - DB_USER=adempiere
      - DB_PASSWORD=adempiere
      - DB_TYPE=PostgreSQL
    ports:
      - 50059:50059

  redis:
    image: redis:4-alpine
    container_name: adempiere-redis
    stdin_open: true
    tty: true
    ports:
      - '6379:6379'

  es7:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.3.2
    container_name: adempiere-eslastic-search
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - ./elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml:ro
    ports:
      - '9200:9200'
      - '9300:9300'
    environment:
      - discovery.type=single-node
      - cluster.name=docker-cluster
      - bootstrap.memory_lock=true
      - ES_JAVA_OPTS=-Xmx512m -Xms512m

  api-rest:
    image: erpya/proxy-adempiere-api
    container_name: adempiere-proxy
    depends_on:
      - es7
      - redis
    stdin_open: true
    tty: true
    environment:
      - SERVER_PORT=8085
      - AD_DEFAULT_HOST=adempiere-backend
      - AD_DEFAULT_PORT=50059
      - ES_HOST=adempiere-eslastic-search
      - ES_PORT=9200
      - VS_ENV=dev
      - INDEX=vue_storefront_catalog
      - RESTORE_DB=N
    ports:
      - 8085:8085

  vue-app:
    image: erpya/adempiere-vue
    container_name: adempiere-frontend
    stdin_open: true
    tty: true
    environment:
      - API_URL=http://adempiere-proxy:8085
    ports:
      - 9526:80

  e-commerce:
    image: erpya/adempiere-ecommerce
    container_name: adempiere-ecommerce
    stdin_open: true
    tty: true
    environment:
      - SERVER_PORT=3000
      - API_URL=http://adempiere-proxy:8085
      - STORE_INDEX=vue_storefront_catalog
      - VS_ENV=dev
    ports:
      - 3000:3000

Nota: El contenedor Elasticsearch requiere un archivo de configuración elasticsearch.yaml.

# requiere permisos de super usuario del sistema operativo ('su' o 'sudo')
docker-compose up

Contenedores de salida:

  • adempiere-backend
  • adempiere-redis
  • adempiere-eslastic-search
  • adempiere-proxy
  • adempiere-frontend
  • adempiere-ecommerce