使用laravel-mix在传统页面上使用vue组件总结

laravel-mixlaravel框架下前端助手,方便使用vuereact等。

功能强度大,目前仍在持续更新,这里使用最新laravel 6.x,也就是长期支持版中的laravel-mix总结使用过程中遇到的问题及解决办法。以iview的UI库为例。

无论是否使用laravle框架都可以使用的。

起步

安装最新的node LTS,也就是node 14。

使用镜像:npm config set registry https://registry.npm.taobao.org

下载package.json:

https://github.com/laravel/laravel/blob/6.x/package.json

安装依赖:
npm install

安装iview和vue:
npm install view-design -D
npm install vue -D

创建一个简单的welcome页面,里面就一个welcome组件,详见完整代码

创建文件webpack.mix.js:

const mix = require('laravel-mix');

mix.setPublicPath('/public');
mix.js('src/resources/js/welcome.js', 'js');

打包测试:npm run dev

 DONE  Compiled successfully in 2277ms                                                                      下午10:39:31

                                                                               Asset      Size       Chunks             Chunk Names
                                                                      /js/welcome.js  2.37 MiB  /js/welcome  [emitted]  /js/welcome
  fonts/vendor/view-design/dist/styles/ionicons.svg?a2c4a261a239aa84463dc70e4bac9b9a   542 KiB               [emitted]
  fonts/vendor/view-design/dist/styles/ionicons.ttf?d535a25a79fb1365ae814b61e88fae71   193 KiB               [emitted]
fonts/vendor/view-design/dist/styles/ionicons.woff2?143146fa24554ae2c5ac0a3982abb952  80.3 KiB               [emitted]
 fonts/vendor/view-design/dist/styles/ionicons.woff?99ac3308dd8ee14f749f51538d0d5b9e   193 KiB               [emitted]

自定义字体路径

虽然可以使用,但fonts路径非常长,而且有时候,配置错误导致找不到。

有两种方式,一种是直接不处理css中的url,虽然有选项processCssUrls,但这个版本不支持css中使用这个选项,sass等可以。

node_modules/laravel-mix/src/components/Css.js中第13行importLoaders: 1后加上, url: false

第二种是重写webpack配置,可以在其中自定义fonts路径:

mix.override(function (webpackConfig) {
    webpackConfig.module.rules[2] = {
        test: /(\.(woff2?|ttf|eot|otf)$|font.*\.svg$)/,
        loader: 'file-loader',
        options: {
            name: path => {
                return Config.fileLoaderDirs.fonts + '/[name].[ext]?[hash]';
            },
            publicPath: Config.resourceRoot
        }
    };
});

使用CDN

可以看到打包成功,但包很大,其中有vue,iview等,如果使用CDN就好了

配置webpack的externals属性即可使用全局window的vue和iview

mix.webpackConfig({
    externals: {
        vue: "Vue",
        iview: "iview",
    }
})

同时welcome.js中注释掉iview和iview.css相关的代码,在页面上加上CDN的vue和iview资源

DONE  Compiled successfully in 1240ms                                                                      下午10:55:14

         Asset      Size  Chunks             Chunk Names
/js/welcome.js  2.18 KiB       0  [emitted]  /js/welcome

可以看到npm run prod后,只有2KB,效果相当明显。

自动更新资源版本号

已经可以很好的使用了,但是更新代码时,浏览器有缓存,需要加上打包文件的版本号。

if (mix.inProduction()) {
    mix.version();
}

再次运行,可以看到public目录中已经有了mix-manifest.json,里面记录着资源的版本号。

为了正则匹配方便,这里页面的名字和js名字相同,都为welcome。

mix.then(function (stats) {
    if(mix.inProduction()){
        var manifest = fs.readFileSync('public/mix-manifest.json', 'utf8');
        var htmlContents = fs.readFileSync('public/welcome.html', 'utf8');
        var reg = new RegExp('\\/js\\/welcome.js[^"\']*');
        var newContents = htmlContents.replace(reg, JSON.parse(manifest)['/js/welcome.js']);
        fs.writeFileSync('public/welcome.html', newContents, 'utf8');
    }
});

可以看到welcome.html中已经有了:
<script src="/js/welcome.js?id=9e68f0bd505dc4dd4218"></script>

通用页面打包

现在mix只能处理welcome页面,如果要打包about页面就需要另外重写

可以使用npm scripts接受页面的名字,实现根据参数不同打包不同页面

npm run通过--可以添加自定义参数

例如: npm run production -- --page welcome,mix脚本就可以接受到page参数

简写的需要添加两个--,因为第一个--传递给脚本时消耗了

npm run prod -- -- --page welcome

通过minimist可以获取优雅的参数键值对。

var minimist = require('minimist');

var args = minimist(process.argv.slice(2));
var page = args.page;

将脚本中welcome换成page参数即可。

提取通用组件

页面很多以后难免有重用的,提取到一个js中可以减少资源大小,充分利用缓存。

以前使用CommonsChunkPlugin,这个现在已经废弃了。

mix.webpackConfig({
    optimization: {
        splitChunks: {
            cacheGroups: {
                commons: {
                    name: "commons",
                    chunks: "initial",
                    minChunks: 2
                }
            }
        }
    }
});

完整代码

https://download.csdn.net/download/m0_49946916/20289433

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值