Laravel 中,运行 NPM run dev 之后, jQuery 没有被编译到 public/JS/app.js

记录一个 BUG

前提

laravel版本5.7.13
下载好了node_modules整个文件夹

问题重现

第一步:执行 art perset none,将前端框架设置为 none
第二步:执行 art perset bootstrap,将前端框架设置为 bootstrap
第三步:执行 npm run dev进行编译,编译出来的 public/js/app.js 文件大小为591 KB
第四步:刷新网页,模态框不起作用,说明jQuery没有被编译到public/js/app.js文件中

原因

在我们使用art perset bootstrap命令的时候,resources/js/bootstrap.js文件内容被修改如下

window._ = require('lodash');
window.axios = require('axios');
window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';
let token = document.head.querySelector('meta[name="csrf-token"]');
if (token) {
    window.axios.defaults.headers.common['X-CSRF-TOKEN'] = token.content;
} else {
    console.error('......');
}

但是在该版本的 laravel 中,官方原版的文件内容如下:

window._ = require('lodash');
try {
    window.Popper = require('popper.js').default;
    window.$ = window.jQuery = require('jquery');

    require('bootstrap');
} catch (e) {}
window.axios = require('axios');
window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';
let token = document.head.querySelector('meta[name="csrf-token"]');
if (token) {
    window.axios.defaults.headers.common['X-CSRF-TOKEN'] = token.content;
} else {
    console.error('......');
}

说明在使用art perset bootstrap命令的之后,resources/js/bootstrap.js文件内容被改的有问题,此命令有 BUG

解决方案

复制官方文件中的内容,覆盖resources/js/bootstrap.js文件,重新运行 npm run dev进行编译,public/js/app.js 文件大小变成了为 1.07 MB,说明 jQuery已经被编译进去了,刷新网页,模态框起作用了

本作品采用《CC 协议》,转载必须注明作者和本文链接
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 2

5.8了问题依旧存在,还是得用官方原始bootstrap.js覆盖resources下bootstrap.js,再次编译后正常。后来观察了下,在执行artisan preset none的时候bootstrap.js文件被vendor\laravel\framework\src\Illuminate\Foundation\Console\Presets\none-stubs\bootstrap.js覆盖了,然后再切换到artisan preset bootstrap,resources下的bootstrap.js文件还是不会更新。

4年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!