排除误区:
看到有人误解externals的作用,所以必须先正确认识externals的作用
1.作用
首先webpack提供这个==externals==选项作用是==从打包的bundle文件中排除依赖==。换句话说就是让在项目中通过import引入的依赖在打包的时候不会打包到bundle包中去,而是通过script的方式去访问这些依赖。
2.怎么用?
以jquery为例子,目的是在runtime时通过cdn获取jquery依赖,在打包时忽略他的打包
步骤一:
//index.html
<script
src="https://code.jquery.com/jquery-3.1.0.js"
integrity="sha256-slogkvB1K3VOkzAI8QITxV3VzpOnkeNVsKvtkYLMjfk="
crossorigin="anonymous">
</script>
步骤二:
//webpack.config.js
module.exports = {
//...
externals: {
jquery: 'jQuery'
//将需要忽略打包的都写在这个里面,但前提是index.html文件里面必须script引入
}
};
//属性名jquery指的是 import $ from 'jquery'中的 'jquery'
属性值 jQuery指的是jquery插件暴露出来的全局对象名。按理来说$应该也是可以写在属性值里面的,(也是jquery暴露的啊,但我没试过行不行)。
步骤三:
文件中的
import $ from 'jquery';
千万不能去掉。 很重要,好多人就是把它去掉了跑过来问我为啥我的还是报错jquery is undefined。
laravel+vue项目中怎么使用externals
两步曲:
1.
//webpack.mix.js
let mix = require('laravel-mix');
const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin;
mix.webpackConfig({
plugins: [
// new BundleAnalyzerPlugin(),
],
externals: {
'vue' : 'Vue',
'vuex' : 'Vuex',
'vue-router' : 'VueRouter',
'element-ui' : 'Element',
'lodash' : '_',
'jquery' : 'jQuery',
'axios' : 'axios',
}
}).js('resources/assets/js/app.js', 'public/js')
.sass('resources/assets/sass/app.scss', 'public/css')
.extract(['vue','vuex',])
.styles(['node_modules/element-ui/lib/theme-chalk/index.css'], 'public/css/element-ui.css');
2.
//welcome.blade.php
外部引入cdn的地址
<script src="//cdn.bootcss.com/vue/2.5.7/vue.min.js"></script>
<script src="//cdn.bootcss.com/vuex/3.0.1/vuex.min.js"></script>
<script src="//cdn.bootcss.com/vue-router/3.0.1/vue-router.min.js"></script>
<script src="//cdn.bootcss.com/element-ui/2.2.0/index.js"></script>
<script src="//cdn.bootcss.com/jquery/3.2.0/jquery.min.js"></script>
<script src="//cdn.bootcss.com/axios/0.17.0/axios.min.js"></script>
<script src="//cdn.bootcss.com/lodash.js/4.17.4/lodash.min.js"></script>
<script src="{{ mix('js/manifest.js') }}"></script>
<script src="{{ mix('js/vendor.js') }}"></script>
<script src="{{ mix('js/app.js') }}"></script>