Los documentos de Webpack indican que output.publicPath
es:
El
output.path
de la vista del JavaScript.
¿Podría por favor explicar qué significa esto realmente?
Utilizo output.path
y output.filename
para especificar dónde Webpack debería generar el resultado, pero no estoy seguro de qué poner output.publicPath
y si es necesario.
module.exports = {
output: {
path: path.resolve("./examples/dist"),
filename: "app.js",
publicPath: "What should I put here?"
}
}
javascript
webpack
Misha Moroshko
fuente
fuente
path
y cuándo usaríaspublicPath
?Respuestas:
output.path
Directorio de disco local para almacenar todos sus archivos de salida (ruta absoluta) .
Ejemplo:
path.join(__dirname, "build/")
Webpack generará todo en
localdisk/path-to-your-project/build/
output.publicPath
Donde subiste tus archivos empaquetados. (Relativo a la raíz del servidor)
Ejemplo:
/assets/
Se supone que implementó la aplicación en la raíz del servidor
http://server/
.Mediante el uso
/assets/
, la aplicación va a encontrar webpack activos en:http://server/assets/
. Bajo el capó, cada url que encuentre el paquete web se reescribirá para comenzar con "/assets/
".fuente
Cuando se ejecuta en el navegador, el paquete web necesita saber dónde alojará el paquete generado. Por lo tanto, puede solicitar fragmentos adicionales (cuando se utiliza la división de código ) o archivos de referencia cargados a través del cargador de archivos o el cargador de URL, respectivamente.
Por ejemplo: si configura su servidor http para alojar el paquete generado
/assets/
, debe escribir:publicPath: "/assets/"
fuente
publicPath solo se usa para fines de desarrollo, Estaba confundido la primera vez que vi esta propiedad de configuración, pero tiene sentido ahora que he usado webpack por un tiemposupongamos que coloca todos sus archivos fuente js en la
src
carpeta y configura su paquete web para construir el archivo fuente en ladist
carpetaoutput.path
.Pero desea servir sus activos estáticos en una ubicación más significativa como
webroot/public/assets
, esta vez puede usarout.publicPath='/webroot/public/assets'
, para que en su html, pueda hacer referencia a su js<script src="/webroot/public/assets/bundle.js"></script>
.cuando se solicita
webroot/public/assets/bundle.js
lawebpack-dev-server
encontrará el js en la carpeta distActualizar:
gracias por Charlie Martin para corregir mi respuesta
original: publicPath solo se usa para fines de desarrollo, esto no es solo para fines de desarrollo
fuente
publichPath
secuestrar solicitudes y devolver los archivos en memoria.webpack -p
para construir sus activos, y sus activos deben ser atendidos por su servidor de aplicaciones o su servidor nginx en lugar de servidor webpack o middleware webpack, por lo que esta configuración ya no es útil en el entorno de producción, ¿estoy en lo cierto? ?Puede usar publicPath para señalar la ubicación donde desea que webpack-dev-server sirva sus archivos "virtuales". La opción publicPath será la misma ubicación de la opción de compilación de contenido para webpack-dev-server. webpack-dev-server crea archivos virtuales que usará cuando lo inicies . Estos archivos virtuales se parecen a los archivos empaquetados reales que crea el paquete web. Básicamente, querrá que la opción --content-base apunte al directorio en el que se encuentra su index.html. Aquí hay una configuración de ejemplo:
webpack-dev-server ha creado una carpeta de activos virtuales junto con un archivo virtual bundle.js al que hace referencia. Puede probar esto yendo a localhost: 8080 / assets / bundle.js y luego verifique en su aplicación estos archivos. Solo se generan cuando ejecuta webpack-dev-server.
fuente
/build/bundle.js
realizo la compilación a mano , ¿tendré que cambiarlasrc
en miindex.html
archivo, verdad?src
línea en el archivo index.html. En este momento está apuntando a"assets/bundle.js"
si pasará a producción en el paquete estará,"build/bundle.js"
así que tendré que cambiar eso en la línea html src asrc="build/bundle.js"
. ¿O hay una forma más automatizada?/assets/
a/build
. De esta manera no tengo que cambiar mi index.html. También moví mi index.html fuera de la carpeta de compilación y en la raíz de la aplicación.en mi caso, tengo un cdn, y voy a colocar todos mis archivos estáticos procesados (js, imgs, fonts ...) en mi cdn, supongamos que la url es http://my.cdn.com/
así que si hay un archivo js que es la url de referencia original en html es './js/my.js', debería convertirse en http://my.cdn.com/js/my.js en el entorno de producción
en ese caso, lo que necesito hacer es configurar publicpath igual a http://my.cdn.com/ y webpack agregará automáticamente ese prefijo
fuente
filename especifica el nombre del archivo en el que se acumulará todo el código incluido después de pasar por el paso de compilación.
ruta especifica el directorio de salida donde se guardará el archivo app.js (nombre de archivo) en el disco. Si no hay un directorio de salida, webpack creará ese directorio por usted. por ejemplo:
Esto creará un directorio myproject / examples / dist y en ese directorio creará app.js , /myproject/examples/dist/app.js . Después de compilar , puede navegar a myproject / examples / dist / app.js para ver el código incluido
publicPath: "¿Qué debo poner aquí?"
publicPath especifica el directorio virtual en el servidor web desde donde se servirá el archivo empaquetado, app.js. Tenga en cuenta que el servidor de palabras cuando usa publicPath puede ser webpack-dev-server o express server u otro servidor que puede usar con webpack.
por ejemplo
esta configuración le dice a webpack que agrupe todos sus archivos js en examples / dist / app.js y escriba en ese archivo.
publicPath le dice a webpack-dev-server o express server que sirva este archivo incluido, es decir, ejemplos / dist / app.js desde la ubicación virtual especificada en el servidor, es decir, / public / assets / js. Entonces, en su archivo html, debe hacer referencia a este archivo como
En resumen, publicPath es como un mapeo entre
virtual directory
en su servidor youtput directory
especificado por la configuración de output.path, cada vez que llega la solicitud de archivo public / assets / js / app.js , se servirá el archivo /examples/dist/app.jsfuente
La documentación de webpack2 explica esto de una manera mucho más limpia: https://webpack.js.org/guides/public-path/#use-cases
fuente
publicPath es utilizado por webpack para reemplazar la ruta relativa definida en su CSS para referirse a la imagen y al archivo de fuente.
fuente