首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何使用laravel mix和webpack将环境变量传递给scss/ sass文件?

如何使用laravel mix和webpack将环境变量传递给scss/ sass文件?
EN

Stack Overflow用户
提问于 2019-09-30 19:36:59
回答 3查看 4.2K关注 0票数 1

我有一个环境变量CDN_URL,我想把这个变量发送到SCSS文件。我也尝试过sass-loader的prependData。

我必须使用Laravel 5.7、Laravel Mix 4.1.2和webpack 4.27.1

错误:"...load the style“后的CSS无效:应为1个选择器或at-rule,为"var content = requi”

下面是我的'webpack.mix.js‘文件代码。

代码语言:javascript
运行
AI代码解释
复制
mix.webpackConfig({
module: {
    rules: [
        {
            test: /\.s[ac]ss$/i,
            use: [
                'vue-style-loader',
                'style-loader',
                'css-loader',
                {
                    loader: 'sass-loader',
                    options: {
                        indentedSyntax: true,
                        prependData: '$cdn-s3-static-url: ' + process.env.CDN_S3_STATIC_URL + ';',
                    },
                },
            ],
        },
    ],
},

});

下面是我的'_functions.scss‘文件代码:

代码语言:javascript
运行
AI代码解释
复制
@function asset($type, $file) {
 @return url('#{$cdn-s3-static-url}#{$asset-base-path}#{$type}/#{$file}');
}
EN

回答 3

Stack Overflow用户

发布于 2019-09-30 20:03:34

您可以使用sass-loader将数据预先添加到SASS

例如,从.env传递CDN_URL

扩展webpack.mix.js

代码语言:javascript
运行
AI代码解释
复制
module.exports = {
  module: {
    rules: [
      {
        test: /\.s[ac]ss$/i,
        use: [
          'style-loader',
          'css-loader',
          {
            loader: 'sass-loader',
            options: {
              prependData: '$env: ' + process.env.CDN_URL + ';',
            },
          },
        ],
      },
    ],
  },
};
票数 1
EN

Stack Overflow用户

发布于 2020-10-20 18:09:17

在我的例子中,我运行的是一个gatsby网站。在每次构建之前,它都会运行gatsby-config.js,它可以访问环境变量。

因此,在构建的.js文件的顶部,在module.exports之前,我放置了以下内容:

代码语言:javascript
运行
AI代码解释
复制
if(process.env.NODE_ENV === 'development') {
  fs.writeFileSync('./src/styles/build-style.scss','$root: "/development-path/";');
} else {
  fs.writeFileSync('./src/styles/build-style.scss','$root: "/production-path/";');
}

这将生成一个如下所示的文件:

代码语言:javascript
运行
AI代码解释
复制
$root: "/development-path/";

然后在我需要ENV依赖行为的SCSS文件中,我有:

代码语言:javascript
运行
AI代码解释
复制
@import './build-style.scss';
@font-face {
  font-family: "MyFontFamily";
  src: url($root + "font/MyFontFamily.woff") format('woff');
}

现在,我的资产(本例中为font)根据我的dev/production环境变量从不同的位置加载。

这感觉像一个大的黑客,我相信有一个更正确的方法,但这让我在一个小时后再次移动,到目前为止,它是有效的。我可能会在将来将其扩展到build-style-dev.scssbuild-style-prod.scss,并在编译时将它们复制到build-style.scss中。或者研究正确的方法。

票数 1
EN

Stack Overflow用户

发布于 2019-09-30 19:42:56

您可以通过在.env文件中为密钥添加前缀MIX_来将环境变量注入到Laravel Webpack Mix中。在.env文件中定义变量后,您可以通过process.env对象进行访问。

因此,在您的示例中,应该在MIX_CDN_URL这样的.env文件中创建一个新变量,并且在webpack.mix.js中可以使用以下命令访问它

代码语言:javascript
运行
AI代码解释
复制
process.env.MIX_CDN_URL

你可以通过sass-loader来实现你想要的结果。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58174234

复制
相关文章
Laravel Mix 初探
针对 Laravel 优化了的 Laravel Mix, 提供了高效优雅的 API,用于使用几个常见的 CSS 和 JavaScript 预处理器为应用定义 Webpack 构建步骤,基本可以使到 80% 的webpack用例都变得简单明了。
志航
2018/11/02
4.4K0
Laravel Mix 初探
在 Laravel 项目中使用 Bootstrap 框架
如官方文档所言,Laravel 并不强制你使用 CSS 框架,但是开箱提供了对 Bootstrap 的支持,在 resources/js/bootstrap.js(在 Laravel 5.7 之前的版本位于 resources/assets/js/bootstrap.js)中,我们可以看到对 bootstrap js库的引入:
学院君
2020/10/30
3.5K0
在 Laravel 项目中使用 Bootstrap 框架
【玩转腾讯云】已有laravel 添加vue
rem适配文档上建议使用lib-flexible,flexible适配的原理是物理像素与逻辑像素的相互转化:物理像素px = window.screen.width(逻辑像素pt) * window.devicePixelRatio
无忧366
2020/02/21
3.7K0
将博客主题替换成 Clean Blog
在此之前,我们先为前端资源创建对应目录,在根目录下创建 resources 目录,然后在该目录下新建 js、sass 子目录,分别用于存放编译前的脚本、样式文件。
学院君
2020/09/11
7520
laravel5.4+vue+element简单搭建(gulp+laravel Elixir)(转)
{ "private": true, "scripts": { "prod": "gulp --production", "dev": "gulp watch" }, "devDependencies": { "babel-core": "^6.20.0", "babel-loader": "^6.2.9", "css-loader": "^0.25.0", "element-ui": "^1.1.1", "gulp": "^3.9.1", "handsontable": "0.27.0", "laravel-elixir": "^6.0.0-15", "laravel-elixir-vue-2": "^0.2.0", "laravel-elixir-webpack-official": "^1.0.10", "style-loader": "^0.13.1", "vue": "^2.1.4", "vue-loader": "^10.0.0", "vue-resource": "^1.0.3", "vue-router": "^2.1.1", "vue-template-compiler": "^2.1.4", "axios": "^0.15.2", "bootstrap-sass": "^3.3.7", "jquery": "^3.1.0", "laravel-mix": "^0.5.0", "lodash": "^4.16.2" }, "dependencies": {} }<span style="font-size:18px;"> </span>
lin_zone
2018/08/15
1.6K0
页面布局(下):引入 Tailwind CSS 框架构建博客应用 UI 界面
在上篇教程中,学院君给大家演示了单页面博客应用前端路由和页面布局的基本构建,不过由于没有应用任何 CSS 样式代码,所以 UI 界面很丑陋,今天,学院君将引入 Tailwind CSS 框架来美化这个博客应用的 UI 界面。
学院君
2023/03/03
2.8K1
页面布局(下):引入 Tailwind CSS 框架构建博客应用 UI 界面
sass scss区别_scss是什么
Sass 和 SCSS 其实是同一种东西,我们平时都称之为 Sass,两者之间不同之处有以下两点:
全栈程序员站长
2022/11/03
1.9K0
CSS 预编译语言 Sass 快速入门教程
CSS 作为一门样式语言,语法简单,易于上手,但是由于不具备常规编程语言提供的变量、函数、继承等机制,因此很容易写出大量没有逻辑、难以复用和扩展的代码,在日常开发使用中,如果没有完善的编码规范,编写的 CSS 代码会非常冗余且难以维护。
学院君
2020/10/30
7.2K0
CSS 预编译语言 Sass 快速入门教程
引入 SB Admin 2 作为后台管理系统主题
完全前端基本功能之后,接下来,我们来构建这个 PHP 博客项目后台管理系统,主要包含登录认证,仪表盘页面,专辑、文章的创建、修改和删除,以及消息后台查看等功能。最终后台界面效果图如下(依次是专辑列表页、发布文章页、消息列表页):
学院君
2020/09/28
4.3K0
引入 SB Admin 2 作为后台管理系统主题
Scss (Sass) 语法简介
Scss 是 CSS 的扩展, 在保证兼容性的基础上, 允许使用变量、 嵌套、 混合、 导入等特性, 在编写大量的 CSS 文件时很有帮助。
beginor
2020/08/10
8720
引入 Laravel Mix 管理前端资源
到目前为止,我们还是使用很原始的方式引入前端资源文件 —— 在特定目录下存放完整的 CSS、JavaScript 文件,然后在 HTML 文档中静态引入。
学院君
2020/08/27
1.6K0
前后端分离探索——MVC 项目升级的一个过渡方案
传统项目大多数是 MVC 架构,直接使用 PHP 等后端语言渲染 HTML 模板,返回给浏览器
cnguu
2020/10/23
1.3K0
前后端分离探索——MVC 项目升级的一个过渡方案
Sass 和 SCSS 有什么区别?
SCSS 是 Sass 3 引入新的语法,其语法完全兼容 CSS3,并且继承了 Sass 的强大功能。Sass 和 SCSS 其实是同一种东西,我们平时都称之为 Sass,两者之间不同之处有以下两点: 文件扩展名不同,Sass 是以“.sass”后缀为扩展名,而 SCSS 是以“.scss”后缀为扩展名 语法书写方式不同,Sass 是以严格的缩进式语法规则来书写,不带大括号({})和分号(;),而 SCSS 的语法书写和我们的 CSS 语法书写方式非常类似。 先来看一个示例: Sass 语法: $font-
小胖
2018/06/27
6200
sass或scss入门
1、sass环境搭载: 安装ruby 安装sass 安装compass 配置webstorm 如果只是使用sass的话,就配置sass命名监听就好了 如图:  sass目录如下: 如果配置了compa
windseek
2018/06/14
5640
基于 Vue 测试套件引入 Mocha + Expect 测试 Vue 组件
在 Vue 框架中编写单元测试的基本流程和学院君之前在 Laravel 框架和 Go-Micro 微服务框架中编写单元测试时一模一样,只是使用的测试框架和语法有所区别罢了,Laravel 中我们使用的测试框架是 PHPUnit,Go-Micro 中我们使用的测试框架是 GoConvey,而在 Vue 框架中,我们将使用 Vue 生态的 Vue 测试套件并引入 Mocha 测试框架进行 BDD 风格的单元测试。
学院君
2023/03/03
1.4K0
基于 Vue 测试套件引入 Mocha + Expect 测试 Vue 组件
Vue-Cli该如何使用?Vue-Cli学习笔记,持续记录
修改.Env环境变量文件之后,需要重新运行server才会生效。环境变量通过process.ENV访问。可以在项目根目录中放置下列文件来指定环境变量:
房东的狗丶
2023/02/17
1.6K0
创建并运行一个新的 Laravel 项目
经过 PHP 入门到实战系列的基础学习,接下来我们就可以正式开始 Laravel 框架的学习和使用了。而这一切都需要从创建一个新的 Laravel 项目开始。
学院君
2020/10/19
7K0
创建并运行一个新的 Laravel 项目
vue 开发常用工具及配置六:认识各种 loader
默认 webpack 只能处理 js 文件,如果在 js 文件中导入了 css 代码:
LIYI
2020/01/14
2.7K0
vue 开发常用工具及配置六:认识各种 loader
点击加载更多

相似问题

Laravel mix.sass "prependData“不向scss文件提供数据

13

Webpack -导出SASS (.scss)文件

23

(Laravel)如何在webpack.mix.js中实现sass和tailwindcss

20

如何使用laravel-mix正确组合sass和less文件?

123

如何将sass和scss与webpack相结合?

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文