在 less-loader 中导入全局变量
Import global variables in less-loader
在我的 webpack 配置中,我希望能够定义一个全局 less-variables 文件,该文件将包含在每个 less 组件中。
使用 sass-loader,您可以提供以下选项:
loaderOptions: {
data: "@import 'globals.sass'"
}
我能用 less-loader 找到的唯一选项是 globalVars:
loaderOptions: {
globalVars: {}
}
现在,一切正常,但 globalVars 需要一个具有键值对的对象。我宁愿在某个地方有一个 theme.less 附加在每个组件上。这可以用 less-loader 实现吗?
我建议将 less-loader
与 text-transform-loader
链接起来,如下所示:
rules: [{
test: /\.js$/,
use: [
{
loader: 'less-loader',
options: //your normal options
},
{
loader: 'text-transform-loader',
options: {
prependText: '@import "../styles/theme.less"'
}
}
]
}]
请记住,最后一个 webpack 加载器首先应用,因此您可能希望将此加载器用作链中的最后一个加载器。如果您的 less 文件嵌套在不同的深度,这很可能会中断,因为这样您的主题文件相对于每个文件的深度就会不同。如果是这种情况,您可以将主题文件的全部内容附加到每个 less 文件中!
将您的 theme.less
文件从该规则中排除也是个好主意,否则您可能会得到一些奇怪的无限递归。
我就是这样做的:
rules: [{
test: /\.less$/,
use: [{
loader: 'less-loader',
options: {
javascriptEnabled: true
}
},
{
loader: 'style-resources-loader',
options: {
patterns: [
path.resolve(__dirname, 'src/application/less/variables.less'),
path.resolve(__dirname, 'src/application/less/flex.less'),
path.resolve(__dirname, 'src/application/less/functions.less'),
]
}
}]
}]
在 less 选项下有两种方法可以做到这一点:
- 附加数据
additionalData: (content, loaderContext) => {
return `@import '~@/global.less';${content}`
}
- 较少选项
lessOptions: {
modifyVars: {
// you should config resolve alias option for @
[any key name you like]: `true;@import'~@/global.less';`,
},
}
它们是相同的结果和原理,只是additionalData可以prepend或append,而modifyVars只能append。可以在 less-loader source code.
中找到更多详细信息
在我的 webpack 配置中,我希望能够定义一个全局 less-variables 文件,该文件将包含在每个 less 组件中。
使用 sass-loader,您可以提供以下选项:
loaderOptions: {
data: "@import 'globals.sass'"
}
我能用 less-loader 找到的唯一选项是 globalVars:
loaderOptions: {
globalVars: {}
}
现在,一切正常,但 globalVars 需要一个具有键值对的对象。我宁愿在某个地方有一个 theme.less 附加在每个组件上。这可以用 less-loader 实现吗?
我建议将 less-loader
与 text-transform-loader
链接起来,如下所示:
rules: [{
test: /\.js$/,
use: [
{
loader: 'less-loader',
options: //your normal options
},
{
loader: 'text-transform-loader',
options: {
prependText: '@import "../styles/theme.less"'
}
}
]
}]
请记住,最后一个 webpack 加载器首先应用,因此您可能希望将此加载器用作链中的最后一个加载器。如果您的 less 文件嵌套在不同的深度,这很可能会中断,因为这样您的主题文件相对于每个文件的深度就会不同。如果是这种情况,您可以将主题文件的全部内容附加到每个 less 文件中!
将您的 theme.less
文件从该规则中排除也是个好主意,否则您可能会得到一些奇怪的无限递归。
我就是这样做的:
rules: [{
test: /\.less$/,
use: [{
loader: 'less-loader',
options: {
javascriptEnabled: true
}
},
{
loader: 'style-resources-loader',
options: {
patterns: [
path.resolve(__dirname, 'src/application/less/variables.less'),
path.resolve(__dirname, 'src/application/less/flex.less'),
path.resolve(__dirname, 'src/application/less/functions.less'),
]
}
}]
}]
在 less 选项下有两种方法可以做到这一点:
- 附加数据
additionalData: (content, loaderContext) => {
return `@import '~@/global.less';${content}`
}
- 较少选项
lessOptions: {
modifyVars: {
// you should config resolve alias option for @
[any key name you like]: `true;@import'~@/global.less';`,
},
}
它们是相同的结果和原理,只是additionalData可以prepend或append,而modifyVars只能append。可以在 less-loader source code.
中找到更多详细信息