我有以下项目结构:
config.less
设置了在Proj.A上定义的@variables config.less
npm install
安装在End Project中)
js
的样式,例如require('index.less')
为了更好地简化,有一个例子:
Proj.A
/*index.less*/
// declare all my variables
@bg-color: pink
组件
/* component.js */
require('component.less')
/* component.less */
@import '~projA/index.less'
结束项目
/* index.js */
require('config.less')
var myComponent = require('component')
/* config.less */
@import '~projA/index.less'
@bg-color: blue
webpack config (这是一个超级简单的webpack配置,唯一特别的东西是较少的加载器)
{
loaders: [
{
test: /\.less$/,
loader: ExtractTextPlugin.extract('css?sourceMap!less?sourceMap&strictMath')
}
]
}
我希望如果我需要Component
隔离它,它应该得到一个@bg-color: pink
。但如果End Project
需要它,则应获得@bg-color: blue
。
现在它离开了pink
。有没有办法告诉webpack | less-loader
不要单独捆绑或与特定的node_modules有某种关联。我想知道如何解决这个问题,或许可以创建一个新的loader
?
谢谢!
答案 0 :(得分:1)
非常简单的解决方案,如果你控制所有部分(可能有点hacky):
<强>组件强>
/* component.js */
require('component.less')
/* component.less */
@import '~projA/index.less'
@import (optional) "@{THEME}"; /* if optional works, not tested */
结束项目
/* index.js */
var myComponent = require('component')
/* config.less */
@bg-color: blue
webpack config
{
loaders: [
{
test: /\.less$/,
loader: ExtractTextPlugin.extract('css?sourceMap!less?{"modifyVars":{"THEME":"\'' + path.resolve('config.less') + '\'"}}')
}
]
}
答案 1 :(得分:0)
如果没有您的网络包配置,很难说出您正在做什么,所以我只能告诉您我所知道的。
我过去所做的事情是使用链式装载机为我的风格(风格!css!less)。样式加载器在其中有一个很好的功能,用于&#34;引用计数样式&#34;或者我喜欢称它们为可用物。
这个想法是你的组件可以&#34;使用&#34;和&#34;不使用&#34;更少的文件和webpack样式加载器将根据需要从DOM中添加/删除这些较少的文件,这样您就可以更多地控制加载和未加载的样式。
See this github page了解更多信息。