He leído la documentación de Google y varias preguntas similares, y no tengo éxito en adaptar las respuestas a mi problema. Estoy trabajando con Google App Engine en un entorno estándar de Node.js y ya tengo gran parte de mi aplicación funcionando y configurada correctamente.
Ahora estoy tratando de usar módulos npm como código de biblioteca para AMBOS , mi aplicación del lado del servidor y una aplicación javascript del lado del cliente que estoy sirviendo como un directorio estático. Para este ejemplo, considere el módulo jquery ampliamente utilizado, por supuesto disponible en npm
Creo que el problema está en mi archivo app.yaml , resumido en la parte relevante para esta pregunta:
handlers: ### THIS ROUTE IS NOT WORKING - url: /client/shared/lib/jquery\.js$ static_files: node_modules/jquery/dist/jquery.js upload: node_modules/jquery/dist/jquery\.js$ mime_type: text/javascript ### CLIENT-SIDE STATIC ROUTES ARE WORKING - url: /client/shared static_dir: shared - url: /client.*$ static_dir: client - url: /.*$ redirect_http_response_code: 301 script: auto Por supuesto, ya he ejecutado $ npm install jquery . Por ejemplo, desde el "lado del servidor" (mi archivo app.js y amigos), lo siguiente funciona perfectamente:
import $ from "./node_modules/jquery/dist/jquery.jsLa importación desde mi propio código "compartido" también funciona tanto desde el cliente como desde el servidor a través de:
import { whatever } from "../shared/<module>.js" Pero cuando implemento y navego a https://<myapp>/client/shared/lib/jquery.js , aparece un error 404.
El objetivo es obtener jquery de mis archivos javascript estáticos del "lado del cliente" con:
import $ from "../shared/lib/jquery.js"(O una ruta relativa equivalente para módulos más profundos en el árbol de directorios).
Jquery quizás no sea el mejor ejemplo, si te molesta finge que estoy hablando de la biblioteca "pluralize". Tengo la intención de usar muchas otras distribuciones npm de bibliotecas js y compartirlas entre mis archivos JavaScript servidos estáticamente del "lado del cliente" y mi código del "lado del servidor" importado/apuntado desde el script: rutas en app.yaml y/o importaciones de app.js
Además, sé que puedo usar un "empaquetador", o un cdn, etc. y es posible que eventualmente esté en producción, pero de acuerdo con toda la documentación, esto/debería/funcionar. Una respuesta correcta realmente me mostrará cómo hacer que esto funcione y/o me enseñará lo que no entiendo sobre los static_files y las opciones del controlador de upload en app.yaml , no sugerirá una alternativa que esté a una gran distancia de edición de mi configuración actual. .