【问题标题】:Laravel mix.js inside a loop doesn't output anything循环内的 Laravel mix.js 不输出任何内容
【发布时间】:2019-02-16 23:14:00
【问题描述】:

我正在开发一个 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() 时,它可以工作,所以我确定我进入了循环。我还检查了变量fileenvmoduleName 的值,它们是正确的(所以问题不是来自我的路径)。

我猜mix.js() 不能在循环中运行,有人遇到过这个问题吗?你找到解决办法了吗?

提前谢谢:)

【问题讨论】:

  • 这与循环无关。异步回调可能是问题所在。

标签: javascript laravel webpack laravel-mix


【解决方案1】:

确实是异步回调的问题,我没有仔细阅读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`);
    }
});

谢谢你!为我指明了正确的方向:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-13
    • 1970-01-01
    • 1970-01-01
    • 2013-03-01
    • 1970-01-01
    • 2017-06-24
    相关资源
    最近更新 更多