в предыдущей статьеИспользование Ant Design of React в приложении create-реагировать с Ejectв использовании
create-react-appСоздал проект React, выставил конфигурацию веб-пакета с помощью Eject и успешно внедрил ее по мере необходимости.antd. Основное содержание этой статьи: Решениеcreate-react-appПосле создания проектаlessнеэффективные вопросы;antdВнедрить по требованиюlessисходные файлы и обнаруженныеbezierEasing.lessпроблема с ошибкой файла;antdКак настроить локальные шрифты;lessиспользоватьcss moduleКонфигурация.
прямой импортlessСтиль не работает
Создайтеtest.less, И вApp.jsвведен в
.test {
color: red;
}
// App.js
...
import './test.less'
...
<div className="test">test</div>
<Button type="primary">Button</Button>
...
Установлено, что цвет теста не вступает в силу, потому что приложение Create-React - не имеет встроенного встроенного загрузчика
Установитьlessа такжеless-loaderи измените конфигурацию веб-пакета
$ cnpm i less less-loader --save-dev
Изменить конфигурацию веб-пакета
Исправлятьwebpack.config.dev.jsа такжеwebpack.config-prod.jsФайл конфигурации, добавить меньше конфигурации файла:
// webpack.config.dev.js
...
{
test: /\.less$/,
use: [
require.resolve('style-loader'),
{
loader: require.resolve('css-loader'),
options: {
importLoaders: 1,
},
},
{
loader: require.resolve('less-loader') // compiles Less to CSS
}
],
},
...
После перезапуска проекта стиль LESS вступил в силу.
antdстиль с использованиемlessИмпорт по исходному файлу
существуетbabel-plugin-importВот такая пара описаний стиля в :
["import", { "libraryName": "antd" }] : import js modularly
["import", { "libraryName": "antd", "style": true }] : import js and css modularly (LESS/Sass source files)
["import", { "libraryName": "antd", "style": "css" }] : import js and css modularly (css built files)
Измените package.json наstyleЗначение изменяется наtrue
...
"babel": {
"presets": [
"react-app"
]
],
"plugins": [
["import", { "libraryName": "antd", "libraryDirectory": "es", "style": true }]
]
}
...
После перезапуска ошибка компиляции, подсказкаbezierEasing.lessдокумент.bezierEasingMixin()Ошибка метода:
Проверьте по адресу проблемы, указанному в отчете об ошибке:issues/44
Причина в том, что опция Enable Inline JavaScript устарела после less v3:меньше CSS.org/usage/#less…
Есть в основном 2 решения
- Отбросьте меньше версии ниже 3.0
- Загрузчик Less добавляет конфигурацию и включает JavaScript:
// webpack.config.dev.js
...
{
- loader: require.resolve('less-loader') // compiles Less to CSS
+ loader: require.resolve('less-loader'), // compiles Less to CSS
+ options: {
+ javascriptEnabled: true
+ }
}
опять такиnpm start, проект можно запускать нормально.
antdИспользовать локальный шрифт iconfont
Обновленная 5 сентября 2018 года серия про дизайн муравьев открыла серию крупных обновлений в сентябрьском школьном сезоне.umiВышла версия 2.0, а вместе с ней иant design proВерсия 2.0 построена на umi 2.0. Сегодня заметил, что основным обновлением в версии 3.9.0 дизайна ant является рефакторинг значка с использованием SVG вместо предыдущего значка шрифта css. Поэтому, если вы используете ant design версии 3.9.0 или более поздней, проблем с тем, что файлы шрифтов нельзя будет найти в автономном режиме, не будет. Если вы используете дизайн ant ниже версии 3.9.0, вы можете обратиться к следующему методу, чтобы использовать iconfont в автономном режиме.
Файл iconfont по умолчанию Ant Design размещен по адресу iconfont.cn и использует адрес alicdn, предоставляемый платформой по умолчанию, к которому можно получить доступ и использовать в общедоступной сети.
Поскольку alicdn имеет ограничения на доступ к некоторым доменным именам или должен использоваться в среде интрасети, шрифты необходимо загружать локально.
Последние файлы iconfont можно найти по адресуэта ссылкаскачать.
После загрузки поместите файл шрифта вpublic/iconfont/под дорожкой
Поскольку проект использует приложение Create-React-App для создания проекта, а стиль использования ANNDbabel-plugin-importСпрос на стили загрузки, мы можем только принятьПользовательские темысерединаless-loaderизmodifyVarsНастройте, чтобы переопределить исходную переменную стиля.
конкретные изменения
Исправлятьwebpack.config.dev.jsа такжеwebpack.config-prod.jsконфигурационный файл
// webpack.config.dev.js
...
{
loader: require.resolve('less-loader'), // compiles Less to CSS
options: {
javascriptEnabled: true,
modifyVars: {
"icon-url": "'/public/iconfont/iconfont'"
}
}
}
Перезапустите проект и успешно внедрите локальные шрифты
должен быть в курсеwebpack.config-prod.jsв файлеicon-urlпуть должен бытьpublicЗамените на путь к файлу проекта рабочей среды после упаковкиpublicКопируйте файлы и папки прямо вbulidпод дорожкой. Использование относительного пути приведет к ошибке и не может быть скомпилировано.Я не знаю, есть ли лучший способ справиться с этим.Я надеюсь, что читатели могут предоставить лучший способ.
// webpack.config-prod.js
...
{
loader: require.resolve('less-loader'), // compiles Less to CSS
options: {
javascriptEnabled: true,
modifyVars: {
"icon-url": "'/your-project-name/iconfont/iconfont'"
}
}
}
Ввести меньше в виде модуля css
Увеличиватьcss-loaderКонфигурация
{
test: /\.less$/,
// exclude: [/node_modules/],
use: [
require.resolve('style-loader'),
{
loader: require.resolve('css-loader'),
options: {
importLoaders: 1,
+ modules: true
},
},
{
loader: require.resolve('less-loader'), // compiles Less to CSS
options: {
javascriptEnabled: true,
modifyVars: {
"icon-url": "'/public/iconfont/iconfont'"
}
}
}
],
},
ИсправлятьApp.js, импортировано с помощью модуля css
- import './test.less'
+ import styles from './test.less'
class App extends Component {
render() {
return (
<div className="App">
- <div className="test">test</div>
+ <div className={styles.test}>test</div>
<Button type="primary">Button</Button>
</div>
);
}
}
Перезапустите проект, стиль теста, введенный модулем css, вступит в силу, но стиль кнопки antd недействителен.
Нужно изменитьwebpack.config.dev.js, только правильноsrcсерединаlessфайл открытьcss module, немного громоздко писать сюда, должен быть способ получше.
// webpack.config.dev.js
...
{
test: /\.less$/,
use: [
require.resolve('style-loader'),
{
loader: require.resolve('css-loader'),
options: {
importLoaders: 1
},
},
{
loader: require.resolve('less-loader'), // compiles Less to CSS
options: {
javascriptEnabled: true,
modifyVars: {
"icon-url": "'/public/iconfont/iconfont'"
}
}
}
],
},
{
test: /\.less$/,
include: [/src/],
use: [
require.resolve('style-loader'),
{
loader: require.resolve('css-loader'),
options: {
importLoaders: 1,
modules: true
},
}
],
},
...
Обновление 2018-08-02, брат оставил сообщение в области комментариев, в котором говорилось, что
npm installназад,css moduleВведенный стиль недействителен. Я протестировал его сегодня, и у него есть эта проблема. Я пытался изменить указанную выше пару.lessПоследовательность обработки файлов загрузчиком может решить эту проблему, но принцип не очень понятен, помогите пожалуйста братья кто понял принцип, спасибо
// webpack.config.dev.js
...
{
test: /\.less$/,
include: [/src/],
use: [
require.resolve('style-loader'),
{
loader: require.resolve('css-loader'),
options: {
importLoaders: 1,
modules: true
},
}
],
},
{
test: /\.less$/,
use: [
require.resolve('style-loader'),
{
loader: require.resolve('css-loader'),
options: {
importLoaders: 1
},
},
{
loader: require.resolve('less-loader'), // compiles Less to CSS
options: {
javascriptEnabled: true,
modifyVars: {
"icon-url": "'/public/iconfont/iconfont'"
}
}
}
],
},
...
Суммировать
Эта статья находится вejectизcreate-react-appНа основе проекта, внедряется по требованиюantd, столкнулся сlessНесколько проблем с : решеноlessПроблема в том, что файл не вступает в силу, среда интрасети использует локальнуюiconfontконфигурация,css moduleспособ конфигурации. В этой статье все еще есть некоторые методы настройки, которые не оптимальны, надеюсь, вы сможете дать лучшие решения.
Я начинаю React недавно, и я собираюсь записать свой собственный процесс обучения и пошагового выполнения. Следующая статья должна бытьdvaиспользование.