我对Laravel-Mix有一个奇怪的问题,每当我尝试混用sass
或js
时,它们最终会进入一个完全错误且不同的目录,例如:
这是我的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'
);
文件中的构造函数引起的,但是我无法确认,我真的不知道该如何解决,无法将两个文件都放在一个地方编译。
答案 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');
就是这样,值得注意的是,此操作花了我整整两天时间才能生效,我想我应该在此处记录答案,以帮助某人,谢谢。