У меня мало реагирующих проектов, в которых есть несколько компонентов, которыми они делятся.Поэтому я хотел создать библиотеку, содержащую компоненты, которые они используют.
Например, у меня есть компонент ActionButton
, который выглядит следующим образом:
import React from 'react';
import PropTypes from 'prop-types';
import './ActionButton.scss';
const ActionButton = ({ children }) => (
<button className="action-button"> {children}</button>
)
export default ActionButton;
Это файл scss:
@import "../../styles/variables";
.action-button {
background-color: $primary; // this is defined in the variables scss file.
}
и variable.scss
$primary: blue !default;
Теперь я хочу иметь возможность создать библиотеку с этим ActionButton
с возможностью изменения значения $primary
.
Я использую rollup
для создания библиотеки с такой конфигурацией:
import babel from 'rollup-plugin-babel'
import commonjs from 'rollup-plugin-commonjs'
import external from 'rollup-plugin-peer-deps-external'
import postcss from 'rollup-plugin-postcss'
import sass from 'rollup-plugin-sass';
import scssVariable from 'rollup-plugin-sass-variables'
import resolve from 'rollup-plugin-node-resolve'
import url from 'rollup-plugin-url'
import svgr from '@svgr/rollup'
import pkg from './package.json'
export default {
input: 'src/index.js',
treeshake: false,
output: [
{
file: pkg.main,
format: 'cjs',
sourcemap: true
},
{
file: pkg.module,
format: 'es',
sourcemap: true
}
],
plugins: [
external(),
postcss({
modules: false,
extract: true
}),
url(),
svgr(),
babel({
exclude: 'node_modules/**',
plugins: [ 'external-helpers' ]
}),
resolve({
extensions: ['.js', '.jsx'],
}),
commonjs(),
scssVariable(),
]
}
Сейчас в проекте, который использует эту библиотеку, я попытался импортировать variables.scss
и перезаписать переменную, но это не такне работает:
// this is in the package that uses this library
@import '<PackageName>/src/styles/variables.scss;
$primary: red;
Затем, когда я рисую ActionButton
, он все еще синий.
Что мне нужно сделать в моей библиотеке, чтобы разрешить такую функциональность?