Estoy tratando de automatizar los activos que entran / dist. Tengo el siguiente config.js:
module.exports = {
context: __dirname + "/lib",
entry: {
main: [
"./baa.ts"
]
},
output: {
path: __dirname + "/dist",
filename: "foo.js"
},
devtool: "source-map",
module: {
loaders: [
{
test: /\.ts$/,
loader: 'awesome-typescript-loader'
},
{ test: /\.css$/, loader: "style-loader!css-loader" }
]
},
resolve: {
// you can now require('file') instead of require('file.js')
extensions: ['', '.js', '.json']
}
}
También quiero incluir main.html del directorio que se encuentra al lado de / lib, en la carpeta / dist cuando ejecute webpack. ¿Cómo puedo hacer esto?
ACTUALIZACIÓN 1 2017_____________
Mi forma favorita de hacer esto ahora es usar el html-webpack-plugin
archivo de plantilla. Gracias a la respuesta aceptada también! ¡La ventaja de esta manera es que el archivo de índice también tendrá el enlace js cachbusted agregado de fábrica!
-loader
sufijo. por ejemplorequire('file-loader?name=[name].[ext]!../index.html');
{ test: /index\.html/, loader: 'file-loader', query: { name: '[name].[ext]' }
a suloaders
matriz en su archivo de configuración de webpack, solo que no pude conseguir que webpack-dev-server lo sirviera, lo que, curiosamente, solicitó un 404/
(la raíz no existe !).Agregaré una opción a la respuesta de VitalyB:
Opción 3
Vía npm. Si ejecuta sus comandos a través de npm, puede agregar esta configuración a su package.json (consulte también webpack.config.js allí). Para el desarrollo de la ejecución
npm start
, no es necesario copiar index.html en este caso porque el servidor web se ejecutará desde el directorio de archivos de origen y el bundle.js estará disponible desde el mismo lugar (el bundle.js vivirá solo en la memoria pero estará disponible como si estuviera ubicado junto con index.html). Para la ejecución de producciónnpm run build
y una carpeta dist contendrá su bundle.js e index.html se copia con el viejo comando cp, como puede ver a continuación:Actualización: Opción 4
Hay una copia-webpack-plugin , como se describe en esta respuesta de Stackoverflow
Pero, en general, a excepción del "primer" archivo (como index.html) y los activos más grandes (como imágenes grandes o videos), incluya css, html, imágenes, etc. directamente en su aplicación a través de
require
y el paquete web lo incluirá para usted (bueno, después de configurarlo correctamente con cargadores y posiblemente complementos).fuente
Puede usar CopyWebpackPlugin . Funciona así:
fuente
package.json
solo se usan para cosas simples como iniciar el corredor de prueba o el servidor de desarrollo.Yo diría que la respuesta es: no puedes. (o al menos: no deberías). Esto no es lo que se supone que debe hacer Webpack. Webpack es un paquete y no debe usarse para otras tareas (en este caso: copiar archivos estáticos es otra tarea). Debes usar una herramienta como Grunt o Gulp para hacer tales tareas. Es muy común integrar Webpack como una tarea de Grunt o como una tarea de Gulp . Ambos tienen otras tareas útiles para copiar archivos como usted describió, por ejemplo, grunt-contrib-copy o gulp-copy .
Para otros activos (no el
index.html
), puede agruparlos con Webpack (para eso es exactamente Webpack). Por ejemplo,var image = require('assets/my_image.png');
. Pero supongo que susindex.html
necesidades no deben ser parte del paquete y, por lo tanto, no es un trabajo para el paquete.fuente
file-loader
, que básicamente sólo copia el archivo / imagen en el directorio de salida y le da la dirección URL cuando lo requiere:var url = require('myFile');
. Como dije, un paquete puede ser uno o varios archivos.Puede agregar el índice directamente a la configuración de su entrada y usar un cargador de archivos para cargarlo
fuente
Para copiar un
index.html
archivo ya existente en eldist
directorio, simplemente puede usar HtmlWebpackPlugin especificando la fuenteindex.html
como plantilla .El
dist/index.html
archivo creado será básicamente el mismo que su archivo fuente con la diferencia de que webpack inyecta<script>
etiquetas a los recursos agrupados como archivos .js . La minificación y otras opciones se pueden configurar y documentar en github .fuente
Esto funciona bien en Windows:
npm install --save-dev copyfiles
package.json
tengo una tarea de copia:"copy": "copyfiles -u 1 ./app/index.html ./deploy"
Esto mueve mi index.html de la carpeta de la aplicación a la carpeta de implementación.
fuente
Para extender la respuesta de @ hobbeshunter si desea tomar solo index.html, también puede usar CopyPlugin. La principal motivación para usar este método sobre el uso de otros paquetes es porque es una pesadilla agregar muchos paquetes para cada tipo y configurarlo, etc. La forma más fácil es usar CopyPlugin para todo:
Luego
Como puede ver, copie toda la carpeta estática junto con todo su contenido en la carpeta dist. No se necesita CSS ni archivos ni ningún otro complemento.
Si bien este método no es adecuado para todo, haría el trabajo de manera simple y rápida.
fuente
También me pareció fácil y lo suficientemente genérico para poner mi
index.html
archivo en eldist/
directorio y añadir<script src='main.js'></script>
aindex.html
incluir mis archivos WebPack en paquete.main.js
parece ser el nombre de salida predeterminado de nuestro paquete si no se especifica otro en el archivo conf de webpack . Supongo que no es una buena solución a largo plazo, pero espero que pueda ayudar a comprender cómo funciona el paquete web .fuente