tho*_*ard 2 javascript laravel webpack laravel-mix
我正在使用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');
Run Code Online (Sandbox Code Playgroud)
我还想实现的是拥有我编写的模块,这些模块在多个(2个或更多)页面/入口点之间共享,并自动提取到一个单独的块中(例如commons.js)。我可以这样:
mix.webpackConfig({
plugins: [
new webpack.optimize.CommonsChunkPlugin({
name: "commons",
filename: "js/commons.js",
minChunks: 2
})
]
});
Run Code Online (Sandbox Code Playgroud)
但这不能与mix.extract()一起使用。我在这里看到了例子。但不确定如何在Laravel Mix中完成此操作。
理想情况下,输出应为:
js/
|- page1.js
|- page2.js
|- commons.js
|- vendor.js
Run Code Online (Sandbox Code Playgroud)
在查看了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
})
]
});
Run Code Online (Sandbox Code Playgroud)
这将产生4个输出文件:
js/
|- page1.js
|- page2.js
|- commons.js
|- vendor.js
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1835 次 |
| 最近记录: |