为 Laravel Elixir/SASS 指定输入目录
Specify input directory for Laravel Elixir/SASS
我目前的 resources/assets
目录结构与正常目录有点不同,因为我想在我的项目中有多个 "themes"。
目前我有以下结构:
resources/assets/theme-one/scss/*
resources/assets/theme-one/coffee/*
和
resources/assets/theme-two/scss/*
resources/assets/theme-two/coffee/*
现在我正在尝试使用 Elixir 构建我的 gulpfile.js
(当前用于主题一)并且我正在尝试为我的 SASS 文件指定输入目录。
var elixir = require('laravel-elixir');
elixir(function(mix) {
mix.sass(['app.scss'], 'public/theme-one/css/app.css');
});
当然,上面的代码默认会查看 resources/assets/sass
目录,但我想告诉它查看 resources/assets/theme-one/scss
目录。
我已经尝试了各种不同的组合来尝试让它工作,但似乎无论我尝试什么,Elixir/gulp-sass 总是试图查看 resources/assets/sass
我得到File not found: resources\assets\sass\app.scss
个错误。
我试过:
- 增加第三个参数,指定输入目录
- 指定与我的
gulpfile.js
相关的文件的完整路径,即 resources/assets/theme-one/scss/app.scss
- 切换第二个和第三个参数
- 深入研究源代码 (https://github.com/laravel/elixir/blob/master/tasks/sass.js and https://github.com/laravel/elixir/blob/master/GulpPaths.js) 以尝试找出如何指定输入目录。
- 为参数 1 中的
app.scss
添加前缀 ./
和完整路径(来自 GulpPaths.js
中从第 97 行开始的注释和代码,解释了在路径前添加前缀./
基本上会跳过前缀)
我一点运气都没有。有什么想法吗?
我唯一能想到的 "solution" 是将我的项目结构改回 Elixir 想要的方式,即有 resources/assets/sass/theme-one/app.scss
和 resources/assets/coffee/theme-one/app.coffee
等,但这不是我想要的想要做。如果一切都失败了,我想我可以将 Elixir 装箱并按原样使用 gulp。
编辑
我现在尝试像这样更改 gulpfile.js
中的 assetsPath
配置项:
var elixir = require('laravel-elixir');
elixir.config.assetsPath = "resources/assets/theme-one";
elixir.config.publicPath = "public/theme-one";
elixir(function(mix) {
mix.sass(['app.scss']);
});
我还在收到 File not found: resources/assets/sass/app.scss
您可以覆盖 Elixir 的 default config(public 和资产):
//in your gulp file :
var elixir = require('laravel-elixir');
elixir.config.assetsPath = "resources/assets/theme-one";
elixir.config.publicPath = "public/theme-one";
elixir(function(mix) {
mix.sass('app.scss');
});
elixir.config.assetsPath = "resources/assets/theme-two";
elixir.config.publicPath = "public/theme-two";
elixir(function(mix) {
mix.sass('app.scss');
});
注意,对于 Elixir 的旧版本(3.0 之前),您需要像这样覆盖 config :
elixir.config.assetsDir = "resources/assets/theme-one";
elixir.config.publicDir = "public/theme-one";
正如 Jonathon
在评论中指出的那样
我目前的 resources/assets
目录结构与正常目录有点不同,因为我想在我的项目中有多个 "themes"。
目前我有以下结构:
resources/assets/theme-one/scss/*
resources/assets/theme-one/coffee/*
和
resources/assets/theme-two/scss/*
resources/assets/theme-two/coffee/*
现在我正在尝试使用 Elixir 构建我的 gulpfile.js
(当前用于主题一)并且我正在尝试为我的 SASS 文件指定输入目录。
var elixir = require('laravel-elixir');
elixir(function(mix) {
mix.sass(['app.scss'], 'public/theme-one/css/app.css');
});
当然,上面的代码默认会查看 resources/assets/sass
目录,但我想告诉它查看 resources/assets/theme-one/scss
目录。
我已经尝试了各种不同的组合来尝试让它工作,但似乎无论我尝试什么,Elixir/gulp-sass 总是试图查看 resources/assets/sass
我得到File not found: resources\assets\sass\app.scss
个错误。
我试过:
- 增加第三个参数,指定输入目录
- 指定与我的
gulpfile.js
相关的文件的完整路径,即resources/assets/theme-one/scss/app.scss
- 切换第二个和第三个参数
- 深入研究源代码 (https://github.com/laravel/elixir/blob/master/tasks/sass.js and https://github.com/laravel/elixir/blob/master/GulpPaths.js) 以尝试找出如何指定输入目录。
- 为参数 1 中的
app.scss
添加前缀./
和完整路径(来自GulpPaths.js
中从第 97 行开始的注释和代码,解释了在路径前添加前缀./
基本上会跳过前缀)
我一点运气都没有。有什么想法吗?
我唯一能想到的 "solution" 是将我的项目结构改回 Elixir 想要的方式,即有 resources/assets/sass/theme-one/app.scss
和 resources/assets/coffee/theme-one/app.coffee
等,但这不是我想要的想要做。如果一切都失败了,我想我可以将 Elixir 装箱并按原样使用 gulp。
编辑
我现在尝试像这样更改 gulpfile.js
中的 assetsPath
配置项:
var elixir = require('laravel-elixir');
elixir.config.assetsPath = "resources/assets/theme-one";
elixir.config.publicPath = "public/theme-one";
elixir(function(mix) {
mix.sass(['app.scss']);
});
我还在收到 File not found: resources/assets/sass/app.scss
您可以覆盖 Elixir 的 default config(public 和资产):
//in your gulp file :
var elixir = require('laravel-elixir');
elixir.config.assetsPath = "resources/assets/theme-one";
elixir.config.publicPath = "public/theme-one";
elixir(function(mix) {
mix.sass('app.scss');
});
elixir.config.assetsPath = "resources/assets/theme-two";
elixir.config.publicPath = "public/theme-two";
elixir(function(mix) {
mix.sass('app.scss');
});
注意,对于 Elixir 的旧版本(3.0 之前),您需要像这样覆盖 config :
elixir.config.assetsDir = "resources/assets/theme-one";
elixir.config.publicDir = "public/theme-one";
正如 Jonathon
在评论中指出的那样