0

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.

2
  • Hey mate, maybe You can use monorepo, take a look at [lerna.js.org/] please. Cheers :) Commented Aug 27, 2023 at 11:42
  • Thanks, I'll definitely take a look! Do you perhaps know of a "low-tech" way to do it using webpack only, like my above post? I ask because I'm trying to understand the ins and outs of webpack, so its helpful for me to start at grass roots level... Commented Aug 28, 2023 at 18:58

0

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.