首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >模块解析失败:意外字符@ (1:0)与童话6.1.11,Webpack 5.11.0,反应17.0.1

模块解析失败:意外字符@ (1:0)与童话6.1.11,Webpack 5.11.0,反应17.0.1
EN

Stack Overflow用户
提问于 2020-12-27 09:40:46
回答 3查看 12.1K关注 0票数 6

试图建立一个反应-应用程序与所有的最新版本。

Github回购链接

尝试使用导入的sass文件运行故事书将导致以下错误。尝试在不导入样式、故事书作品的情况下运行。

相同的代码在以npm start run的形式运行时工作正常,没有警告和错误。

我已经配置了使用@dr.pogodin/babel-plugin-react-css-modules与sass,webpack 5,react 17和最新的软件包的css模块。

代码语言:javascript
复制
ERROR in ./src/assets/stylesheets/app.scss 1:0
Module parse failed: Unexpected character '@' (1:0)
You may need an appropriate loader to handle this file type, currently no loaders are configured to process this file. See https://webpack.js.org/concepts#loaders
> @import "./base.scss";
| @import "./generics/font.scss";
| @import "./generics/spacing.scss";
 @ ./stories/index.js 5:0-44 8:2-10:4 8:58-10:3 9:4-49
 @ ./src/components/atoms/button/stories.js

babel.config.js

代码语言:javascript
复制
module.exports = {
  presets: ["@babel/preset-env", "@babel/preset-react"],
  plugins: [
    [
      "@dr.pogodin/babel-plugin-react-css-modules",
      {
        webpackHotModuleReloading: true,
        autoResolveMultipleImports: true,
        filetypes: {
          ".scss": {
            syntax: "postcss-scss",
          },
        },
        generateScopedName: "[name]__[local]___[hash:base64:5]",
      },
    ],
  ],
};

用于css的webpack.config.js (部分代码被嵌入)

代码语言:javascript
复制
{
        test: /\.(css|sass|scss)$/,
        exclude: /node_modules/,
        use: [
          isDev ? "style-loader" : MiniCssExtractPlugin.loader,
          {
            loader: "css-loader",
            options: {
              modules: {
                auto: (resourcePath) =>
                  resourcePath.indexOf("assets/stylesheets") === -1,
                localIdentName:"[name]__[local]___[hash:base64:5]",
              },
              sourceMap: true,
            },
          },
          "sass-loader",
        ],
      }

storybook/webpack.config.js文件

代码语言:javascript
复制
const custom = require('../webpack.config.js');

module.exports = {
  // stories: ['../src/components/**/*.stories.js'],
  webpackFinal: (config) => {
    return {
      ...config,
      module: {
        rules: custom.module.rules,
      },
      resolve: {
        ...config.resolve,
        ...custom.resolve,
      }
    };
  },
};

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-12-27 12:24:07

我不知道您对配置做了什么,但是您将在.storybook/main.js中定义配置内容。对于全局样式,css应该包括在preview.js文件中。

简而言之,你必须做以下几件事:

  • 删除.storybook/config.js并添加具有以下内容的.storybook/main.js
代码语言:javascript
复制
const custom = require('../webpack.config.js');

module.exports = {
  stories: [
    '../src/**/stories.js', // The name should have a prefix for component name like `button.stories.js` instead of `stories.js` like you've done. As you renamed, you can remove this pattern
    "../src/**/*.stories.@(js|jsx|ts|tsx)"
  ],
  webpackFinal: (config) => {
    return {
      ...config,
      module: {
        rules: custom.module.rules,
      },
      resolve: {
        ...config.resolve,
        ...custom.resolve,
      }
    };
  },
};
  • 创建导入全局样式的.storybook/preview.js
代码语言:javascript
复制
import "../src/assets/stylesheets/app.scss";
票数 4
EN

Stack Overflow用户

发布于 2021-03-26 22:27:50

有些人在使用Storybook 6.2.0与Webpack 5一起使用Storybook 6.2.0时,已经做了一些遇到问题预置。我建议您不要使用预置设置,而是像上面提到的那样在main.js中配置Webpack配置。下面是Sass工作故事集Webpack配置的相关部分:

代码语言:javascript
复制
module: {
        ...config.module,
        rules: [
          ...config.module.rules,
          {
            test: /\.(scss)$/,
            use: [
              {
                loader: 'style-loader',
              },
              {
                loader: 'css-loader',
              },
              {
                loader: 'postcss-loader',
                options: {
                  postcssOptions: {
                    plugins: function () {
                      return [require('precss'), require('autoprefixer')];
                    },
                  },
                },
              },
              {
                loader: require.resolve('sass-loader'),
                options: {
                  implementation: require('sass'),
                },
              },
            ],
          },
        ],
      },

我已经写了更多关于用Webpack 5(和修改故事集Webpack配置) 到这里来的故事书。

票数 3
EN

Stack Overflow用户

发布于 2022-03-14 12:04:57

另一个原因可能会发生:如果您正在向应用程序中添加新组件,并且为您的sass加载程序定义的路径不再匹配。

如果你在你的.storybook/main.js里有这个

代码语言:javascript
复制
  webpackFinal: async config => {
    // Add SASS support
    // https://storybook.js.org/docs/configurations/custom-webpack-config/#examples
    config.module.rules.push({
      test: /\.scss$/,
      use: [
        "style-loader",
        {
          loader: "css-loader",
          options: {
            modules: {
              compileType: "icss",
            },
          },
        },
        "sass-loader",
      ],
      include: path.resolve(__dirname, "../"),
    }) 

更新或完全删除include路径。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65464491

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档