Leo*_*ldz 7 laravel webpack vue.js vuejs2
我的应用程序使用 laravel vue 但不使用 SPA,..所以我仍然使用 laravel Blade 来分隔页面。每个页面都导入app.js。我的 App.js 由 webpack 编译,我的所有 vue 组件都在该文件上编译。所以问题是 app.js 获取 MB 大小,并且每个页面加载该文件的速度都会变慢。他们的方法是分割 vuejs 代码还是使用 webpack 分离每个页面的文件?
这是我的 Web 应用程序中的 webpack.js。
const mix = require('laravel-mix');
/*
|--------------------------------------------------------------------------
| Mix Asset Management
|--------------------------------------------------------------------------
|
| Mix provides a clean, fluent API for defining some Webpack build steps
| for your Laravel application. By default, we are compiling the Sass
| file for the application as well as bundling up all the JS files.
|
*/
mix.setPublicPath('public')
.setResourceRoot('../') // Turns assets paths in css relative to css file
// .options({
// processCssUrls: false,
// })
.sass('resources/sass/frontend/app.scss', 'css/frontend.css')
.sass('resources/sass/backend/app.scss', 'css/backend.css')
.js('resources/js/frontend/app.js', 'js/app.js')
.js([
'resources/js/backend/before.js',
'resources/js/backend/app.js',
'resources/js/backend/after.js'
], 'js/backend.js')
.extract([
// Extract packages from node_modules to vendor.js
'jquery',
'bootstrap',
'popper.js',
'axios',
'sweetalert2',
'lodash'
])
.sourceMaps();
if (mix.inProduction()) {
mix.version()
.options({
// Optimize JS minification process
terser: {
cache: true,
parallel: true,
sourceMap: true
}
});
} else {
// Uses inline source-maps on development
mix.webpackConfig({
devtool: 'inline-source-map'
});
}
Run Code Online (Sandbox Code Playgroud)
我的 laravel 使用 laravel 样板模板,他将其他文件分离到 vender.js 中。我的问题是 app.js 变得越来越大,对于连接速度较慢的用户来说将很难加载。
据我所知,您能做的最好的事情就是使用Dynamic Imports,laravel-mix在内部使用webpack 代码分割,并且最新版本的laravel-mix.
将其添加到您的webpack.mix.js文件中
mix.babelConfig({\n plugins: [\'@babel/plugin-syntax-dynamic-import\'],\n});\nRun Code Online (Sandbox Code Playgroud)\n而且你还需要改变你的方式import组件的使用方式。
// Standard import\nimport StandardComponent from \'./components/ExampleComponent.vue\';\n\n// Dynamic import\nconst DynamicallyImportedComponent =\n () => import(\'./components/ExampleComponent.vue\');\nRun Code Online (Sandbox Code Playgroud)\n通过这种方式,laravel-mix将在单独的文件中编译该组件。并动态地将文件插入到您的html head部分中。因此只会在需要时插入文件。
Webpack 会将动态导入的文件分割成 chunk,并命名为0.js,1.js等。如果要为文件配置 chunk 名称,需要在 import 语句中添加 \xe2\x80\x9cmagic\xe2\x80\x9d 注释告诉 Webpack 你想要使用的名称。就像你在一个webpack设置中所做的那样。喜欢:
const DynamicallyImportedComponent =\n () => import(/* webpackChunkName: "dynamically-imported-component" */ \'./components/ExampleComponent.vue\');\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
2163 次 |
| 最近记录: |