Estoy tratando de pasar de Gulp
a Webpack
. En Gulp
Tengo una tarea que copia todos los archivos y carpetas de / static / folder a / build / folder. ¿Cómo hacer lo mismo con Webpack
? ¿Necesito algún complemento?
javascript
webpack
Vitalii Korsakov
fuente
fuente
Respuestas:
No necesita copiar cosas, el paquete web funciona de manera diferente que el trago. Webpack es un paquete de módulos y se incluirá todo lo que haga referencia en sus archivos. Solo necesita especificar un cargador para eso.
Entonces si escribes:
Webpack primero intentará analizar el archivo referenciado como JavaScript (porque ese es el valor predeterminado). Por supuesto, eso fallará. Es por eso que necesita especificar un cargador para ese tipo de archivo. El archivo , o el cargador de url, por ejemplo, toma el archivo al que se hace referencia, lo coloca en la carpeta de salida del paquete web (que debería estar
build
en su caso) y devuelve la url hash para ese archivo.Por lo general, los cargadores se aplican a través de la configuración del paquete web:
Por supuesto, primero debe instalar el cargador de archivos para que esto funcione.
fuente
Requerir activos utilizando el módulo cargador de archivos es la forma en que se pretende usar el paquete web ( fuente ). Sin embargo, si necesita una mayor flexibilidad o desea una interfaz más limpia, también puede copiar archivos estáticos directamente usando my
copy-webpack-plugin
( npm , Github ). Para sustatic
debuild
ejemplo:fuente
Si desea copiar sus archivos estáticos, puede usar el cargador de archivos de esta manera:
para archivos html:
en webpack.config.js:
en su archivo js:
./static/ es relativo a donde está su archivo js.
Puedes hacer lo mismo con imágenes o lo que sea. ¡El contexto es un método poderoso para explorar!
fuente
index.html
en un subdirectorio que está creando llamado_
(subrayado), ¿qué está pasando?main.js
es decir, está importando todo dentro de lastatic
carpeta:require.context("./static/", true, /^.*/);
Una ventaja que trae el plugin copy-webpack-plugin mencionado anteriormente que no se ha explicado antes es que todos los otros métodos mencionados aquí aún agrupan los recursos en sus archivos de paquete (y requieren que los "requiera" o "importe" en alguna parte). Si solo quiero mover algunas imágenes o algunos parciales de plantilla, no quiero saturar mi paquete de javascript con referencias inútiles, solo quiero que los archivos se emitan en el lugar correcto. No he encontrado ninguna otra forma de hacer esto en webpack. Es cierto que no es para lo que se diseñó originalmente el paquete web, pero definitivamente es un caso de uso actual. (@BreakDS Espero que esto responda a su pregunta, solo es un beneficio si lo desea)
fuente
Las sugerencias anteriores son buenas. Pero para tratar de responder a su pregunta directamente, le sugiero que use
cpy-cli
en un script definido en supackage.json
.Este ejemplo espera
node
en algún lugar de tu camino. Instalarcpy-cli
como una dependencia de desarrollo:npm install --save-dev cpy-cli
Luego cree un par de archivos nodejs. Uno para hacer la copia y el otro para mostrar una marca de verificación y un mensaje.
copy.js
checkmark.js
Agregue el script en
package.json
. Suponiendo que los scripts están en<project-root>/scripts/
Para ejecutar el sript:
npm run copy
fuente
Lo más probable es que deba usar CopyWebpackPlugin, que se mencionó en la respuesta kevlened. Alternativamente, para algún tipo de archivo como .html o .json , también puede usar raw-loader o json-loader. Instálelo a través de
npm install -D raw-loader
y luego lo único que debe hacer es agregar otro cargador a nuestrowebpack.config.js
archivo.Me gusta:
Nota: Reinicie el servidor webpack-dev-server para que los cambios de configuración surtan efecto.
Y ahora puede requerir archivos html usando rutas relativas, esto hace que sea mucho más fácil mover carpetas.
fuente
La forma en que cargo estática
images
yfonts
:No olvides instalar
file-loader
para que funcione.fuente
logo.png
ni tener que crear un nombre de archivo obtuso y "con suerte" único para evitar una colisión global. La misma razón por la que usamos módulos CSS .[path][name].[ext]
y hay mucha flexibilidad para modificar esto para un entorno específico o caso de uso ... cargador de archivosPuedes escribir bash en tu package.json:
fuente
"build": "webpack && xcopy images dist\\images\\ /S /Y && xcopy css dist\\css\\ /S /Y"
Estaba atrapado aquí también. copy-webpack-plugin funcionó para mí.
Sin embargo, 'copy-webpack-plugin' no era necesario en mi caso (lo supe más tarde).
webpack ignora el
ejemplo de rutas raíz
Por lo tanto, para que esto funcione sin usar 'copy-webpack-plugin' use '~' en las rutas
'~' le dice a webpack que considere las 'imágenes' como un módulo
nota: es posible que deba agregar el directorio principal del directorio de imágenes en
Visite https://vuejs-templates.github.io/webpack/static.html
fuente
El archivo de configuración de webpack (en webpack 2) le permite exportar una cadena de promesa, siempre que el último paso devuelva un objeto de configuración de webpack. Consulte los documentos de configuración de promesa . Desde allí:
Puede crear una función de copia recursiva simple que copie su archivo, y solo después de eso se activa el paquete web. P.ej:
fuente
supongamos que todos sus activos estáticos están en una carpeta "estática" en el nivel raíz y desea copiarlos en la carpeta de compilación manteniendo la estructura de la subcarpeta, luego en su archivo de entrada) simplemente coloque
fuente