Laravel-mix输出路径为js和sass输出两个不同的错误路径

时间:2018-08-20 08:48:19

标签: node.js laravel npm webpack

我对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文件{1}},而项目的根目录是'/home/vagrant/pirlanta',这就是实际的webpack.mix文件所在的位置,所以我必须先做一些更改:

'/vagrant/pirlanta/'内部,我像这样更改了'node_modules/laravel-mix/src/Paths.js'函数:

mix()

要使其反映正确的webpack.mix文件。

我真的不知道为什么要将输出文件混合到不同的路径,我几乎肯定这是由上述 mix() { return this.root( argv.env && argv.env.mixfile ? argv.env.mixfile : '/vagrant/pirlanta/webpack.mix' ); 文件中的构造函数引起的,但是我无法确认,我真的不知道该如何解决,无法将两个文件都放在一个地方编译。

1 个答案:

答案 0 :(得分:0)

因此,我很幸运地找到了解决问题的方法,我将尝试将我的工作分解为几个步骤,

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

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

一旦这样做,我的css文件就可以正常在公共文件夹中进行编译了,编译路径最终 s 看到了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');

就是这样,值得注意的是,此操作花了我整整两天时间才能生效,我想我应该在此处记录答案,以帮助某人,谢谢。