Yehudi Mikhael
Yehudi Mikhael

Reputation: 69

Multi entry in Webpack

I'm trying to create a bundle but I need some .js to be loaded before with the "vendor" folders. The structure is as follows:

 -> assets
     ->js
         ->controller
         ->services
         ->directives
         ->vendor
         app.js

when I create the bundle it puts the app.js as first but I need the .js of the "vendor" folder to be first.

const webpack = require('webpack')
const path = require('path')
module.exports = {
  mode: "development",
  entry: {
      main:[path.resolve(__dirname, 'assets/js/vendor/jquery.min.js'),
        path.resolve(__dirname, 'assets/js/vendor/sha256.min.js'),
        path.resolve(__dirname, 'assets/js/vendor/bootstrap.min.js'),
        path.resolve(__dirname, 'assets/js/vendor/angular.js'),
        path.resolve(__dirname, 'assets/js/vendor/smoothscroll.min.js'),
        path.resolve(__dirname, 'assets/js/vendor/jquery.mask.min.js'),
        path.resolve(__dirname, 'assets/js/vendor/cpf.min.js'),
        path.resolve(__dirname, 'assets/js/vendor/clipboard.min.js'),
        path.resolve(__dirname, 'assets/js/vendor/angular-animate.min.js'),
        path.resolve(__dirname, 'assets/js/vendor/angular-cookies.min.js'),
        path.resolve(__dirname, 'assets/js/vendor/angular-locale_pt-br.js'),
        path.resolve(__dirname, 'assets/js/vendor/angular-ui-router.min.js'),
        path.resolve(__dirname, 'assets/js/vendor/bootstrap-angular-validation-all.min.js'),
        path.resolve(__dirname, 'assets/js/vendor/loading-bar.min.js'),
        path.resolve(__dirname, 'assets/js/vendor/nya-bs/nya-bs-select.js'),
        path.resolve(__dirname, 'assets/js/vendor/slick/slick.min.js'),
        path.resolve(__dirname, 'assets/js/vendor/ngCpfCnpj.js'),
        path.resolve(__dirname, 'assets/js/vendor/match-media.js'),
        path.resolve(__dirname, 'assets/js/app.js'),
        path.resolve(__dirname, 'assets/js/services/message.js'),
        path.resolve(__dirname, 'assets/js/services/settings.js'),
        path.resolve(__dirname, 'assets/js/services/urlRedeSocial.js'),
    ]
},
output: {
        filename: 'bundle.js',
        path: path.resolve(__dirname, 'temp/builder'),

    }
}

Upvotes: 3

Views: 114

Answers (1)

n1stre
n1stre

Reputation: 6086

I might be wrong, but I guess what you're looking for is this:

entry: {
  app: [
    path.resolve(__dirname, 'assets/js/app.js'),
    path.resolve(__dirname, 'assets/js/services/message.js'),
    path.resolve(__dirname, 'assets/js/services/settings.js'),
    path.resolve(__dirname, 'assets/js/services/urlRedeSocial.js'),
  ],
  vendor: [
    path.resolve(__dirname, 'assets/js/vendor/jquery.min.js'),
    path.resolve(__dirname, 'assets/js/vendor/sha256.min.js'),
    path.resolve(__dirname, 'assets/js/vendor/bootstrap.min.js'),
    path.resolve(__dirname, 'assets/js/vendor/angular.js'),
    path.resolve(__dirname, 'assets/js/vendor/smoothscroll.min.js'),
    path.resolve(__dirname, 'assets/js/vendor/jquery.mask.min.js'),
    path.resolve(__dirname, 'assets/js/vendor/cpf.min.js'),
    path.resolve(__dirname, 'assets/js/vendor/clipboard.min.js'),
    path.resolve(__dirname, 'assets/js/vendor/angular-animate.min.js'),
    path.resolve(__dirname, 'assets/js/vendor/angular-cookies.min.js'),
    path.resolve(__dirname, 'assets/js/vendor/angular-locale_pt-br.js'),
    path.resolve(__dirname, 'assets/js/vendor/angular-ui-router.min.js'),
    path.resolve(__dirname, 'assets/js/vendor/bootstrap-angular-validation-all.min.js'),
    path.resolve(__dirname, 'assets/js/vendor/loading-bar.min.js'),
    path.resolve(__dirname, 'assets/js/vendor/nya-bs/nya-bs-select.js'),
    path.resolve(__dirname, 'assets/js/vendor/slick/slick.min.js'),
    path.resolve(__dirname, 'assets/js/vendor/ngCpfCnpj.js'),
    path.resolve(__dirname, 'assets/js/vendor/match-media.js')
  ]
},
output: {
  filename: '[name].bundle.js',
  path: path.resolve(__dirname, 'temp/builder'),
}

This will produce two separate bundles. app.bundle.js and vendor.bundle.js. And then, if you're using HtmlWebpackPlugin, you can do something like this to control the order:

new HtmlWebpackPlugin({
    chunks: ['vendor', 'app'],
    chunksSortMode: 'manual'
})

Upvotes: 5

Related Questions