通过环境变量传递的 LESS 变量

LESS variable passed via environment variable

我想在 LESS 中有一个基于环境变量的变量:

@asset-path: process.env.IN_SHELL ? '/path/1/' : '/path/2/'

因为我的资产路径根据加载应用程序的上下文而不同。

我正在使用带有最新 less、less-loader、style-loader 和 postcss-loader(用于供应商前缀)的 webpack (v4)。谢谢

您不能在 LESS 中使用 javascript 函数。逻辑需要在您的 webpack 配置中。
我想我会使用 string-replace-loader 作为 LESS 文件的第一个加载器,并替换正确路径的占位符。

像这样:

{
    test: /\.less$/,
    use: [
        'style-loader',
        'postcss-loader',
        'less-loader',
        {
            loader: 'string-replace-loader',
            options: {
                search: 'PATH-PLACEHOLDER',
                replace: process.env.IN_SHELL ? '/path/1/' : '/path/2/',
            },
        },
    ],
},

您可以在 LessLoader 中使用 modifyVars 功能

modifyVars : { 'asset-path': process.env.IN_SHELL ? '/path/1/' : '/path/2/'}