Laravel 混合:如何在继续混合之前将文件复制到目录 sass
Laravel Mix: How to copy files to a directory before proceeding to mix sass
所以我的用例是我在 laravel webapp 中使用了几个不同的“主题”。我的计划是在执行实际的 mix.sass
步骤之前使用 mix.copyDirectory()
复制该主题的特定 scss 文件。我设置了一个 laravel .env 变量来控制要包含在构建中的主题。
我在 webpack.mix.js
中做了类似的事情:
mix.copyDirectory('resources/sass/' + process.env.MIX_THEME, 'resources/sass/build')
.js('resources/js/app.js', 'public/js')
.sass('resources/sass/build/app.scss', 'public/css');
复制到 resources/sass/build 的文件包括一个 _variables.scss
,它也由我的 Vue 组件导入。 (因此组件共享颜色和其他通用样式)
现在,我遇到的问题是,在第一个 运行(通过 npm run dev
)时,我收到 _variables.scss
不在构建文件夹中的错误。第二次 运行 就好了!所以我认为正在发生的事情是 mix 启动了 copyDirectory,但在 copyDirectory 完成之前继续执行 js 和 sass 步骤。
所以我的问题是:有没有办法让 copyDirectory 等待完成,然后再继续其他步骤(在文档中找不到任何步骤)?或者,如果没有,是否有更好的方法来完成我想做的事情?
因为我的主要问题是我想从另一个文件夹中提取 Vue 组件使用的共享 SCSS 文件,所以我的解决方案最终成为这个问题的解决方案 vue.config.js to (laravel) webpack.mix.js
基本上,我在mix.options中使用globalVueStyles
切换到不同的公共_variables文件,而不是在每个组件中手动导入它。
mix.options({
extractVueStyles: true,
globalVueStyles: 'resources/sass/' + process.env.MIX_THEME + '/_variables.scss'
});
所以我的用例是我在 laravel webapp 中使用了几个不同的“主题”。我的计划是在执行实际的 mix.sass
步骤之前使用 mix.copyDirectory()
复制该主题的特定 scss 文件。我设置了一个 laravel .env 变量来控制要包含在构建中的主题。
我在 webpack.mix.js
中做了类似的事情:
mix.copyDirectory('resources/sass/' + process.env.MIX_THEME, 'resources/sass/build')
.js('resources/js/app.js', 'public/js')
.sass('resources/sass/build/app.scss', 'public/css');
复制到 resources/sass/build 的文件包括一个 _variables.scss
,它也由我的 Vue 组件导入。 (因此组件共享颜色和其他通用样式)
现在,我遇到的问题是,在第一个 运行(通过 npm run dev
)时,我收到 _variables.scss
不在构建文件夹中的错误。第二次 运行 就好了!所以我认为正在发生的事情是 mix 启动了 copyDirectory,但在 copyDirectory 完成之前继续执行 js 和 sass 步骤。
所以我的问题是:有没有办法让 copyDirectory 等待完成,然后再继续其他步骤(在文档中找不到任何步骤)?或者,如果没有,是否有更好的方法来完成我想做的事情?
因为我的主要问题是我想从另一个文件夹中提取 Vue 组件使用的共享 SCSS 文件,所以我的解决方案最终成为这个问题的解决方案 vue.config.js to (laravel) webpack.mix.js
基本上,我在mix.options中使用globalVueStyles
切换到不同的公共_variables文件,而不是在每个组件中手动导入它。
mix.options({
extractVueStyles: true,
globalVueStyles: 'resources/sass/' + process.env.MIX_THEME + '/_variables.scss'
});