I'm trying to configure webpack to compile/bundle small standalone Vue apps (each living in their own separate subdirectory) once, automatically from the top level; instead of setting up webpack inside each of the subdirectories and manually running an npm run build on each of them. How can I achieve this? Below is my current directory structure which works for one app under front-end(the Django subdirectories are not relevant so I've left them out):
. ├── db.sqlite3 ├── front-end/ │ ├── App.vue │ ├── assets │ ├── components │ └── main.js ├── manage.py ├── node_modules/ ├── package-lock.json ├── package.json ├── django_project/ ├── django_app/ ├── static (where i want all the outputs to go) │ ├── d61e288f5de33456b33fb3c47275f16c.png │ └── index-bundle.js └── webpack.config.js (id like this top level config to bundle multiple subdirs) My top level web pack config looks like the following, but currently is only for one Vue app (front-end), whereas I'd like to ideally have several apps under their own subdirs there instead (front-end/vue-app-1, front-end/vue-app-2 etc.):
const path = require('path'); const {VueLoaderPlugin} = require('vue-loader') module.exports = { entry: './front-end/main.js', // path to our input file output: { filename: 'index-bundle.js', // output bundle file name path: path.resolve(__dirname, './static'), // path to our Django static directory }, module: { rules: [ { test: /\.vue$/, loader: 'vue-loader' }, { test: /\.js$/, exclude: /node_modules/, loader: 'babel-loader', options: { presets: [ ['@babel/preset-env', {targets: "defaults"}] ] } }, // this will apply to both plain `.css` files // AND `<style>` blocks in `.vue` files { test: /\.css$/, use: [ 'vue-style-loader', 'css-loader' ] }, { test: /\.(jpe?g|png|gif|svg)$/i, use: [ {loader: 'file-loader'}, {loader: 'image-webpack-loader'}, ] } ] }, plugins: [ // make sure to include the plugin for the magic new VueLoaderPlugin() ] }; Note: the idea is to NOT have to create entirely separate webpack/babel configurations like the following and build them manually:
├── vue-app-1 │ ├── README.md │ ├── babel.config.js │ ├── dist │ ├── jsconfig.json │ ├── node_modules │ ├── package-lock.json │ ├── package.json │ ├── public │ ├── src │ └── vue.config.js ├── vue-app-2 │ ├── README.md │ ├── babel.config.js │ ├── dist │ ├── jsconfig.json │ ├── node_modules │ ├── package-lock.json │ ├── package.json │ ├── public │ ├── src │ └── vue.config.js Thank you so much in advance! I appreciate any additional input since im fairly new to bundling etc. I tried playing around but I dont really see options in web pack for doing this.
PS: in case its helpful, I'm trying to build a hybrid Django + vue app, whereby I can simply drop in the relevant imports into my django templates to get it to load standalone Vue apps where necessary.