1

我尝试使用它的 babel 插件,但是没有用。

我也在使用 craco 来扩展/自定义 Create React App,但我不知道足够的 Webpack 来让 craco 与 Astroturf 一起工作。

4

2 回答 2

1

要使astroturfCreate React App正常工作,您应该推送一个由webpack 规则生成的新规则:

{
    test: /\.(js|mjs|jsx|ts|tsx)$/,
    use: [
        {
            loader: 'astroturf/loader',
            options: { extension: '.module.scss' },
        },
    ],
}

使用react-app-rewiredconfig-overrides.js将如下所示:

module.exports = (config) => {
    config.module.rules.push({
        test: /\.(js|mjs|jsx|ts|tsx)$/,
        use: [
            {
                loader: 'astroturf/loader',
                options: { extension: '.module.scss' },
            },
        ],
    });
    return config;
};

应该craco是类似的

注意: 如果是纯 CSS,.module.scss应替换为.module.css

于 2019-02-04T02:53:15.250 回答
1

我发现 Anton 的回答对我的项目不起作用 - astroturf 加载程序覆盖了 CRA 的内置加载程序。我已经成功了config-overrides.js

const { override, getBabelLoader, addWebpackModuleRule } = require("customize-cra");

const addAstroturf = plugin => config => {
  const babel = getBabelLoader(config);
  babel.loader = [
    { loader: babel.loader, options: babel.options },
    { loader: 'astroturf/loader', options: { extension: '.astroturf.css' } }
  ];
  babel.options = undefined;
  return config;
};

module.exports = override(
  addWebpackModuleRule({
    test: /\.astroturf\.css$/,
    use: ['style-loader', 'astroturf/css-loader'],
  }),
  addAstroturf()
);

addAstroturf函数是一个自定义 CRA 覆盖,它使用 astroturf 扩展加载程序,而不是覆盖。此外,我发现使用 astroturf 意味着import './Foo.css'不再起作用 - 用于astroturf.css将 astroturf 与构建链的其余部分隔离的自定义扩展和 webpack 模块规则。

这是我的依赖项,以防将来 CRA 发生变化:

"create-react-app": "^4.0.0",
"astroturf": "^0.10.5",
"customize-cra": "^1.0.0",
"react": "^17.0.1",
"react-app-rewired": "^2.1.6",
于 2020-11-02T16:53:40.783 回答