首先安裝 babel-plugin:
npm install --save-dev babel-plugin-styled-components
然后將其添加到您的 babel 配置中,如此:
注意
??插件調(diào)用訂單在您的. 巴克爾克文件事項。如果您在 babel 配置中使用 env 屬性,則將此插件放入插件數(shù)組是不夠的。相反,它需要放入每個 env 的插件數(shù)組中,以保持它首先被執(zhí)行。有關(guān)詳細(xì)信息,請參閱此。
{"plugins": ["babel-plugin-styled-components"]}
通過向每個樣式的組件添加唯一標(biāo)識符,此插件避免了由于客戶端和服務(wù)器上的分類生成不同而導(dǎo)致的校驗和不匹配。如果您不使用此插件,并嘗試服務(wù)器端渲染樣式組件 React 將在補液期間使用 HTML 屬性不匹配警告進行投訴。
如有必要,您可以使用Ssr選項:
{"plugins": [["babel-plugin-styled-components",{"ssr": false}]]}
此選項可增強每個組件上附加的 CSS 類名稱,并具有更豐富的輸出,以幫助識別 DOM 中的組件,而無需響應(yīng) DevTools。在頁面源中,你會看到:<按鈕類\"按鈕-asdf123 asdf123" />而不是只是<按鈕類="asdf123" />.
它還允許您查看組件的顯示名稱在反應(yīng)開發(fā)工具中。例如,請考慮編寫一個樣式的組件,該組件呈現(xiàn)按鈕元素,稱為我的按鈕.它通常會以 DevTools 顯示為樣式. 按鈕,但與顯示名稱選項啟用,它有您給它的名稱:我的按鈕.
這樣可以更輕松地查找組件并找出組件在應(yīng)用中的住點。
如果您不需要此功能,可以使用顯示名稱選項:
{"plugins": [["babel-plugin-styled-components",{"displayName": false}]]}
默認(rèn)情況下,顯示名稱組件將用文件名前綴,以使組件名稱盡可能唯一。
您可以強制組件顯示名稱通過禁用文件名選項:
{"plugins": [["babel-plugin-styled-components",{"fileName": false}]]}
一個例子,你可能要做到這一點,是測試與酶的成分。雖然您始終可以使用.find(組件名稱)它絕對有可能搜索組件的顯示名稱與.find("組件名稱").在后一種情況下,您需要禁用文件名選項。如果確實希望僅用于測試,請確保僅在測試環(huán)境下添加此項。
此插件可執(zhí)行兩種類型的分化:一種從 CSS 中刪除所有空白和注釋,另一種刪除標(biāo)記模板文本的所有空白和注釋,將寶貴的字節(jié)從捆綁包中保留。
如果需要,您可以通過 babel 配置禁用此行為:
{"plugins": [["babel-plugin-styled-components", {"minify": false,"transpileTemplateLiterals": false}]]}
由于樣式的組件的轉(zhuǎn)換和構(gòu)造方式,默認(rèn)情況下,明號器無法對它們正確執(zhí)行死代碼消除,因為它們假定有副作用。但是,有一個功能,可以啟用,以幫助此過程稱為"純注釋"。
{"plugins": [["babel-plugin-styled-components", {"pure": true}]]}
它利用一個 babel 幫助器標(biāo)記每個樣式的組件和庫幫助器與#__PURE__JS評論說,一些明化器用于克服上述問題。
這個插件轉(zhuǎn)換樣式組件標(biāo)記模板文本到比 Babel 通常創(chuàng)建較小的表示形式。
等等, 轉(zhuǎn)皮標(biāo)記模板文本?巴貝爾不是土生土長的嗎?????使用 Babel 時,您很可能將 ES2015+ JavaScript 轉(zhuǎn)用于符合 ES5 的代碼,以用于較舊的瀏覽器支持。最受歡迎的基本巴別爾預(yù)設(shè) (es2015 / Env / 最新) 包括babel - plugin - 轉(zhuǎn)換 - es2015 - 模板 - 文字轉(zhuǎn)換,使標(biāo)記的模板文本在較舊的瀏覽器中工作,但有一個警告:該轉(zhuǎn)換的輸出是相當(dāng)冗長的。這樣做是為了滿足規(guī)范要求。
下面是一個處理的轉(zhuǎn)皮代碼的示例。巴貝爾預(yù)設(shè)最新:
var _templateObject = _taggedTemplateLiteral(['width: 100%;'], ['width: 100%;'])function _taggedTemplateLiteral(strings, raw) {return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } }))}var Simple = _styledComponents2.default.div(_templateObject)
樣式組件不需要完全的規(guī)格兼容性。我們的 Babel 插件將跨堆模板文本附加到樣式化組件的略有不同, 較小的形式, 仍然工作在舊的瀏覽器, 但有一個更小的占用空間.
下面是前面的例子與樣式組件 babel 插件和[跨金屬板精簡: true]選項:
var Simple = _styledComponents2.default.div(['width: 100%;'])
該插件也足夠智能,不會修改屬于其他庫和用例的標(biāo)記模板文本:
// Following will be converted:styled.div``keyframe``css```some text` // But this will not be converted:// Here the outer template literal will be converted// because it's attached to the component factory,// but the inner template literals will not be touched:styled.div`color: ${light ? `white` : `black`};`
您可以使用透堆板精簡版選項:
{"plugins": [["babel-plugin-styled-components",{"transpileTemplateLiterals": false}]]}
更多建議: