Creé un nuevo proyecto de nodo usando
npm init npm install apollo-server Luego agregué un archivo index.js con el siguiente código:
const { ApolloServer, gql } = require('apollo-server'); const typeDefs = gql` type Query { hello: String } `; const server = new ApolloServer({ typeDefs, mocks: true, }); server.listen().then(({ url }) => { console.log(`🚀 Server ready at ${url}`) }); Si bien puedo ejecutar esto con node index.js , ¿cómo podría crear una compilación a partir de mi index.js para que no necesite directamente los módulos durante el tiempo de ejecución? (objetivo: implementarlo en plataformas como, por ejemplo, render.com)
Parece que desea crear un solo artefacto ejecutable que no requiera configuración o configuración del lado del servidor para ejecutarse.
Hay algunas opciones para esto. Probablemente esté buscando un paquete de Javascript, como Rollup , Parcel o Webpack . Webpack es el más utilizado, pero también generalmente el más difícil de configurar.
Instale Parcel con npm i -g parcel , luego, agregue esto a su paquete.json:
"main": "dist/index.js", "targets": { "main": { "includeNodeModules": true }, }, Luego ejecute parcel build index.js . ¡Eso es todo!
He agregado una demostración simple en GitHub .
Hay una serie de excelentes respuestas sobre esta pregunta SO .
Muchos paquetes de nodos vienen con complementos binarios/nativos . Por ejemplo, Cypress descarga e instala un navegador. Cualquier paquete que use complementos nativos no funcionará con un paquete, ya que el paquete no puede agregar los archivos binarios. Estos paquetes todavía necesitarán ser instalados.
En los procesos anteriores, su artefacto de salida es un único archivo Javascript. En lugar de un archivo Javascript, también podría producir un archivo binario y así aliviar la necesidad de instalar el tiempo de ejecución de Node. Echa un vistazo a pkg para hacer esto. Si bien pkg es un producto bastante maduro, generalmente todavía se considera una tecnología experimental, por lo que quizás no sea adecuado para un entorno de producción. Por otro lado, no debería tener ningún problema con los paquetes que incluyen complementos nativos. Lea la documentación para ver si es apropiado para su caso de uso.
https://github.com/vercel/ncc esto podría ayudar. incluye node_modules en el artefacto final