javascript - 循环内的 Laravel mix.js 不输出任何内容
问题描述
我正在开发一个 Laravel/VueJs 项目,我正在尝试使用 Laravel mix API 编译我的 js 文件。
到目前为止,它运行良好,我只是将我的资产链接起来,如下所示:
mix.js('path/to/asset/index.js', 'public/js/apps/my_asset.js')
.js('path/to/asset_2/index.js', 'public/js/apps/my_asset_2.js')
.js('path/to/asset_3/index.js', 'public/js/apps/my_asset_3.js')
...
但是这个解决方案并不令人满意,因为我有越来越多的文件要添加到列表中。所以我决定自动化这个过程。
我要做的是读取目录的内容并找到我要编译的所有 .js 文件。然后我遍历这个数组并mix.js()
在每个文件上运行。我的代码如下所示:
const readdir = require('readdir-enhanced');
readdir('resources/assets/js/modules/', {deep: 2}, (err, files) => {
files.map(file => {
if (file.match(/index\.js$/)) {
const moduleName = file.replace('/index.js', '');
mix.js(`resources/assets/js/modules/${file}`, `public/js/${env}/apps/${moduleName}_app.js`)
}
});
});
问题是mix.js()
不起作用,没有生成输出文件。
当我console.log()
进入循环时,它可以工作,所以我确定我进入了循环。我还检查了变量和的值file
,它们是正确的(所以问题不是来自我的路径)。env
moduleName
我想mix.js()
不能在循环中运行,有没有人已经遇到过这个问题?你找到解决方案了吗?
提前致谢 :)
解决方案
确实是异步回调的问题,我没有仔细阅读 readdir-enhanced 的文档。为了解决这个问题,我只是使用了同步函数来读取目录:
let files = readdir.readdirSync('resources/assets/js/modules/', {deep: 2});
files.map(file => {
if (file.match(/index\.js$/)) {
const moduleName = file.replace('/index.js', '');
mix.js(`resources/assets/js/modules/${file}`, `public/js/${env}/apps/${moduleName}_app.js`);
}
});
谢谢你!为我指出正确的方向:)
推荐阅读
- eclipse - 如何使用 Jenkins 通过电子邮件发送 Eclipse 测试代码的输出。动态输出应该在电子邮件的消息正文中
- javascript - 如何在 DynamoDB 查询操作中指定多个条件?
- php - 验证公式中的选择类型
- bootstrap-4 - 使居中的自动溢出 div 在引导程序 4.1.3 中占用剩余空间
- git - GIT 与 JIRA 集成的私有存储库
- javascript - 如何使用javascript将复选框添加到列表中
- jquery - 'string | 类型的参数 号码 | string[]' 不能分配给“string |”类型的参数 号码 |
- node.js - 使用 Sequelize 中的计算值进行更新
- javascript - 当使用 Javascript 到达指定的 url 时,在登录后关闭弹出窗口
- laravel-dusk - 如何测试是否显示浏览器工具提示?