【问题标题】:Webpack, Scss - add cdn server path before compilationWebpack、Scss - 编译前添加cdn服务器路径
【发布时间】:2019-07-29 21:00:04
【问题描述】:

如何在编译前将 cdn 路径变量添加到 styles.scss 中?我有一个适用于 JS 的 webpack 4 配置。 JS/CSS 文件从所需的 cdn url 正确加载。

我想要实现的是,在 localhost 上运行的项目将为图像/图标/字体使用不同的 cdn url,而不是在生产环境中运行的同一个 Web。

我的 webpack 配置中有这些用于设置 cdn 域的行:

if (process.env.NODE_ENV === 'production') {
    webUrl = 'https://cdn.project.com/';
}
else if (process.env.NODE_ENV === 'development') {
    webUrl = 'http://localcdn.localhost/';
}

此代码适用于 JS/CSS 文件,但 CSS 总是使用相对路径加载背景/字体,这当然是主域而不是 cdn。

也许只是在 webpack 编译之前打开 styles.scss 并手动更新文件?没有更好的办法吗?

【问题讨论】:

    标签: npm webpack sass


    【解决方案1】:

    对于 webpack 5,配置略有变化:

      {
          loader: 'sass-loader',
          options : {
                       additionalData : "$cdnFolder: '" + cdnUrl + "';"
                    }
       }                      
    

    【讨论】:

      【解决方案2】:

      经过数小时的反复试验,我找到了这个适用于 webpack 4 的解决方案。它可能会帮助尝试解决相同问题的人。

              {
                  test: /\.(sa|sc|c)ss$/,
                  use: [
                      MiniCssExtractPlugin.loader,
                      {
                          loader: 'css-loader',
                          options : {
                              url : false,
                              sourceMap: devMode
                          }
                      },
                      {
                          loader: 'sass-loader',
                          options : {
                              processCssUrls : false,
                              sourceMap: devMode,
      
                              data : "$cdnFolder: 'http://cdn.myweb.net/';"
                          }
                      }
                  ],
              },
      

      这是 webpack.config.js 的一部分,在以下部分:

      module : {
        rules : {
      

      此配置使 scss 变量 $cdnFolder 在每个 scss 文件中都可用。 CDN链接可以根据当前模式dev/prod/stage进行更改。

      【讨论】:

      • 另一种解决方案是,在 css 中使用相对 url,并从 cdn 加载 css 本身,这样 css 中的资产将相对于 css 路径。
      • @felixmosh 我有这种方式,但它总是加载主域。 CSS在哪里加载而不是从哪里加载无关紧要吗?也许我错了,但我正在寻找这个解决方案,因为相对网址不起作用。
      • 也许你的 html 中有一个 标签,这个标签会覆盖那个行为
      • @felixmosh 没有基本标签 :) 您是否 100% 确定 css 中的相对链接是使用 css 文件的域而不是主域创建的?
      • 是的,我敢肯定,想想看,例如 font-awesome,只提供 css 文件,那么浏览器如何知道字体本身的路径?它必须与该 css 文件相关。
      猜你喜欢
      • 2020-05-26
      • 2016-12-06
      • 1970-01-01
      • 2016-12-26
      • 2015-07-20
      • 2018-07-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多