【问题标题】:Laravel-mix output path is outputting two different wrong paths for both js and sassLaravel-mix 输出路径为 js 和 sass 输出两个不同的错误路径
【发布时间】:2019-01-26 08:53:16
【问题描述】:

我对 Laravel-Mix 有一个奇怪的问题,每当我尝试混合 sassjs 时,它们最终会进入一个完全错误且不同的目录,例如:

这是我的 webpack.mix.js 文件:

mix.js('resources/assets/js/app.js', 'public/js')
    .sass('resources/assets/sass/app.scss', 'public/css');

当我运行 npm run dev 时,这就是我在这些路径中得到这些文件的结果:

 DONE  Compiled successfully in 8073ms                                                                                                                                                  08:32:45
                  Asset     Size  Chunks                    Chunk Names
/vagrant/pirlanta/public/vagrant/pirlanta/public/js/app.js  1.38 MB       0  [emitted]  [big]  /vagrant/pirlanta/public/vagrant/pirlanta/public/js/app
                    ../../../vagrant/pirlanta//css/app.css   198 kB    0, 0  [emitted]         /vagrant/pirlanta/public/vagrant/pirlanta/public/js/app, /vagrant/pirlanta/public/vagrant/pirlanta/public/js/app

值得一提,每当编译css时,我不能让它进入public文件夹,由于某种原因,它每次都从路径中省略“public”一词,您可以在上面的输出中检查'../vagrant/pirlanta//css/app.css',这些“//”之间应该有“public”,我知道为什么它被省略了......

实际上还有一件事,这个 Laravel 应用程序在 VM 中运行,所以我必须进行一些更改,因为 node_modules 目录是符号链接的,在'/home/vagrant/pirlanta/node_modules''/vagrant/pirlanta/node_modules/' 之间。

因为我有一台Windows主机我无法正常安装node_modules,我必须对其进行符号链接,无论如何这会导致一些意外行为,Mix试图从@读取webpack.mix文件987654329@,而项目的根目录是'/vagrant/pirlanta/',这是实际 webpack.mix 文件所在的位置,所以我必须先做一些更改:

'node_modules/laravel-mix/src/Paths.js' 内部,我将mix() 函数更改为这样:

 mix() {
        return this.root(
            argv.env && argv.env.mixfile ? argv.env.mixfile : '/vagrant/pirlanta/webpack.mix'
        );

让它反映正确的 webpack.mix 文件。

我真的不知道为什么要将文件混合输出到不同的路径,我几乎可以肯定这是由上面提到的Paths.js 文件中的构造函数引起的,但我无法确认,我真的不知道'不知道如何解决这个问题,我无法在一个地方编译这两个文件。

【问题讨论】:

    标签: node.js laravel npm webpack


    【解决方案1】:

    所以我纯粹靠运气找到了解决问题的方法,我会尝试将我所做的事情分解成几个步骤,

    第一: 我编辑了node_modules/laravel-mix/src/index.js 并删除了这个功能 完全:

    if (Mix.sees('laravel')) {
        Config.publicPath = 'public';
    }
    

    一旦我这样做了,我的css文件就可以在public文件夹中正常编译了,编译路径终于看到了public这个词,我最终得到了这个路径:

    ../../../vagrant/pirlanta/public/css/app.css 
    

    这正是我所需要的,所以这是一个已解决的问题。

    第二:

    我编辑了node_modules/laravel-mix/src/Paths.js 并更改了 像这样的构造函数:

    constructor() {
            if (argv['$0'].includes('ava')) {
                this.rootPath = path.resolve('', '');
            } else {
                this.rootPath = path.resolve(__dirname, '../../../');
            }
        }
    

    Tbh 我不完全知道我在那里做了什么,但它有效,我编辑了第一个查询 if 语句。

    一旦我这样做了,我的 js 就开始编译到公共文件夹中的正常路径 /public/js/app.js

    所以现在我的两个问题都解决了

    到目前为止,我的 webpack.mix.js 文件看起来像这样,一切正常:

    mix.js('resources/assets/js/app.js', '/public/js')
        .sass('resources/assets/sass/app.scss', '/vagrant/pirlanta/public/css');
    

    就是这样,值得注意的是,这个操作花了我将近整整两天的时间才开始工作,我想我应该在这里记录答案,希望对某人有帮助,谢谢。

    【讨论】:

    • 唯一的问题是它会在你再次执行 npm install 或 update 时中断。
    • 是的,我们需要一个不涉及破解 node_module 文件的解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-31
    • 1970-01-01
    • 2013-09-16
    相关资源
    最近更新 更多