我想为我的项目创建vendor.js
和app.js
文件,其中vendor.js
文件包含Webpack和Vue.js核心代码,而app.js
仅包含为我的应用编写的Vue.js代码。我正在使用laravel-mix
npm模块来包装Webpack并构建我的所有资产。
vendor.js
包含以下一行代码:
window.Vue = require('vue');
app.js
包含以下代码:
import App from './App.vue';
Vue.component('App', App);
new Vue({
el: 'App'
});
webpack.mix.js
包含以下代码:
let mix = require('laravel-mix');
mix.js('src/js/vendor.js', 'public/js/')
.js('src/js/app.js', 'public/js/')
.sass('src/sass/vendor.scss', 'public/css/')
.sass('src/sass/app.scss', 'public/css/');
执行此操作时,vendor.js
正是我想要的,只是Webpack和Vue.js核心代码,但是app.js
也包含Webpack核心代码。我在应用中的vendor.js
之前加载了app.js
,所以两个文件中都不需要Webpack核心代码。
如何构造vendor.js
和app.js
文件以得到我想要的?另外,我在vendor.js
中拥有的代码似乎有点草率(即,我使用的是require
而不是import
,并将其附加到window
对象上, app.js
文件可以访问Vue
对象),我想知道是否有更好的方法。我理想的情况是以下内容:
vendor.js
:
import Vue from 'vue';
app.js
:
import Vue from 'vue';
import App from './App.vue';
Vue.component('App', App);
new Vue({
el: 'App'
});
对我来说,这似乎“更干净”,并且更符合ES6的处理方式,但这有点违背vendor.js
的目的,因为app.js
包含与Vue.js相同的导入。我以为Webpack应该足够“聪明”,以至于我已经将Vue.js导入到vendor.js
文件中,因此当我再次将其导入app.js
时,不需要将所有Vue.js的核心代码又来了。另外,为什么要在两个文件中都添加所有Webpack核心代码?
嗯,我知道答案,但是我希望它足够聪明,只包含一次核心代码。有可能吗?
答案 0 :(得分:1)
使用供应商提取将帮助您,并且为您提供了单独的Webpack运行时块,您是否尝试过? laravel.com/docs/5.7/mix#vendor-extraction
P.S。除非我误解了Webpack代码的含义,否则您的意思是运行时正确吗?