Laravel 混合公共块和供应商块
Laravel Mix common chunk and vendor chunk
我正在使用 Laravel v5.5 构建一个多页面应用程序并使用 Laravel Mix v1.6.2 来编译我的资产。我正在为每个页面 定义一个 入口点。我正在提取供应商模块到一个单独的供应商输出块:
mix.js('resources/assets/js/page1.js', 'public/js')
.js('resources/assets/js/page2.js', 'public/js')
.extract('vue');
我还想完成的是让我编写的 模块在多个(2 个或更多)pages/entry-points 之间共享,自动提取到一个单独的块(例如 commons.js)。我可以这样做:
mix.webpackConfig({
plugins: [
new webpack.optimize.CommonsChunkPlugin({
name: "commons",
filename: "js/commons.js",
minChunks: 2
})
]
});
但这不能与 mix.extract() 一起使用。我看过示例 here。但不确定如何在 Laravel Mix.
中完成此操作
理想情况下,输出类似于:
js/
|- page1.js
|- page2.js
|- commons.js
|- vendor.js
查看 Laravel Mix 源后,我意识到提供给 mix.js().extract() 的数组只是用于创建入口点,而不是使用extract() 我只是使用自定义配置为我的 node_modules 指定入口点,这些入口点在任何地方都在使用,入口点名称与块名称匹配。
let mix = require('laravel-mix');
let webpack = require('webpack');
mix.js('resources/assets/js/page1.js', 'public/js')
.js('resources/assets/js/page2.js', 'public/js');
mix.sass('resources/assets/sass/app.scss', 'public/css');
mix.webpackConfig({
entry: {
vendor: [
'vue',
'axios',
'lodash',
'promise-polyfill',
'setasap'
]
},
plugins: [
new webpack.optimize.CommonsChunkPlugin({
names: ["commons", "vendor"],
filename: 'js/[name].js',
minChunks: 2
})
]
});
这会产生 4 个输出文件:
js/
|- page1.js
|- page2.js
|- commons.js
|- vendor.js
我正在使用 Laravel v5.5 构建一个多页面应用程序并使用 Laravel Mix v1.6.2 来编译我的资产。我正在为每个页面 定义一个 入口点。我正在提取供应商模块到一个单独的供应商输出块:
mix.js('resources/assets/js/page1.js', 'public/js')
.js('resources/assets/js/page2.js', 'public/js')
.extract('vue');
我还想完成的是让我编写的 模块在多个(2 个或更多)pages/entry-points 之间共享,自动提取到一个单独的块(例如 commons.js)。我可以这样做:
mix.webpackConfig({
plugins: [
new webpack.optimize.CommonsChunkPlugin({
name: "commons",
filename: "js/commons.js",
minChunks: 2
})
]
});
但这不能与 mix.extract() 一起使用。我看过示例 here。但不确定如何在 Laravel Mix.
中完成此操作理想情况下,输出类似于:
js/
|- page1.js
|- page2.js
|- commons.js
|- vendor.js
查看 Laravel Mix 源后,我意识到提供给 mix.js().extract() 的数组只是用于创建入口点,而不是使用extract() 我只是使用自定义配置为我的 node_modules 指定入口点,这些入口点在任何地方都在使用,入口点名称与块名称匹配。
let mix = require('laravel-mix');
let webpack = require('webpack');
mix.js('resources/assets/js/page1.js', 'public/js')
.js('resources/assets/js/page2.js', 'public/js');
mix.sass('resources/assets/sass/app.scss', 'public/css');
mix.webpackConfig({
entry: {
vendor: [
'vue',
'axios',
'lodash',
'promise-polyfill',
'setasap'
]
},
plugins: [
new webpack.optimize.CommonsChunkPlugin({
names: ["commons", "vendor"],
filename: 'js/[name].js',
minChunks: 2
})
]
});
这会产生 4 个输出文件:
js/
|- page1.js
|- page2.js
|- commons.js
|- vendor.js