我有這個工作與編寫自定義的「解析」:
const ThemeResolver = {
apply: function(resolver) {
resolver.plugin('file', function(req, cb) {
if (req.request.indexOf('[theme]') == -1) {
return cb();
}
const defaultFile = req.request.replace('[theme]', 'Default');
const themedFile = req.request.replace('[theme]', process.env.THEME);
req.request = themedFile;
this.doResolve(['file'], req, (err) => {
if (!err) {
return cb();
}
req.request = defaultFile;
this.doResolve(['file'], req, cb);
})
});
}
};
module.exports = {
// ...
plugins: [
new webpack.ResolverPlugin([ThemeResolver]),
]
// ...
};
它試圖解決在其路徑[theme]
文件與定義爲環境變量爲主題的路徑。如果失敗,它會回退到默認文件。這樣我可以要求主題的文件,像這樣:
import Presentation from './button-[theme]'
主要成分竟然是比我的問題有點不同,但我實際上是相當知足吧:
import React from 'react';
import Presentation from './button-[theme]';
export default class Button extends React.Component {
onClick = (e) => console.log('some logic');
render() {
return <Presentation onClick={ this.onClick } />;
}
}
此按鈕組分可以活的button.core.jsx
內所述的邏輯,而呈現將由這些組分之一進行處理:
THEME=theme-a npm start // button-[theme] resolves to button-theme-a.jsx
THEME=theme-c npm start // button-[theme] resolves to button-default.jsx
免責聲明:我沒有在大規模或生產環境中使用它,但它似乎在小型POC中起作用。請讓我知道,如果我做了一件不明智的事情!
我遇到了這個問題。其他插件似乎沒有看到它。所以,就我而言,使用'html-webpack-plugin'作爲favicon,它永遠不會解析主題標籤。 – Ben
這實際上是有意義的,因爲你不需要/導入任何東西。你只是做一個參考,你的瀏覽器將加載圖標。你不能在模板中添加一些邏輯嗎? – Jpunt
這可能是我會做的。將上面的「我的品牌文件存在」代碼模塊化,以便我可以在解析器之外使用它。 – Ben