【问题标题】:Serving static files in "storybook js"在“storybook js”中提供静态文件
【发布时间】:2020-02-04 15:38:33
【问题描述】:

我正在使用故事书文档,无法从资产文件夹加载图像。正如文档所说:“如果您使用的是自定义 Webpack 配置,则需要将文件加载器添加到您的自定义 Webpack 配置中” - 我的 webpack.config 文件如下所示:

const path = require('path');


 module.exports = ({ config }) => {
    config.module.rules.push({
      test: /\.scss$/,
      use: ['style-loader', 'css-loader', 'sass-loader']
    });
 config.module.rules.push({
   test: /\.(ts|tsx)$/,
   use: [
     {
       loader: require.resolve('awesome-typescript-loader'),
     },
   ],
 });
 config.module.rules.push({
   test: /\.(svg|png|jpe?g|gif)$/i,
   use: [
     {
       loader: 'file-loader',
     },
    ]
  },);

  config.resolve.extensions.push('.ts', '.tsx')


  return config;
};

package.json:

"react": "^16.10.1",
"react-dom": "^16.10.1",
"typescript": "^3.6.3",
"@storybook/react": "^5.2.1",
"@types/storybook__react": "^4.0.2",
"file-loader": "^4.2.0"

这是纱线故事书

似乎故事书文档中缺少某些内容,或者我做错了什么:?谢谢谁能帮我解决这个问题。 ^_^

【问题讨论】:

  • 我通过添加 custom.d.ts 文件修复了错误,代码如下: declare module "*.svg" { const content: any;导出默认内容;错误消失了,但图标仍然没有显示:/有什么想法吗?

标签: reactjs typescript webpack storybook


【解决方案1】:

如果有人遇到同样的问题,请尝试下面的代码(我正在使用:storybook,react - without create react app,typescript):

第一个问题是关于打字稿的,这对我有用: 我在根文件夹中创建了 custom.d.ts 文件并将此代码放入其中:

declare module "*.svg" {
  const content: string;
  export default content;
}

declare module "svg-inline-react" 

然后我像这样在 tsconfig.json 中添加这个文件:

"files": [
  "./custom.d.ts"
],

之后,错误 - “找不到 imageName.svg” 消失了,但 svg-inline-react 仍然没有显示图标,现在问题在 'webpack.config.js' 文件中,固定代码写在下面.

const path = require('path');

module.exports = ({ config }) => {

  config.module.rules = config.module.rules.map( data => {
    // This overrides default svg rouls of storybook, and after that we can use 
   //svg-inline-loader.
    if (/svg\|/.test( String( data.test ) ))
      data.test = /\.(ico|jpg|jpeg|png|gif|eot|otf|webp|ttf|woff|woff2|cur|ani) 
 (\?.*)?$/;
    return data;
  });

    config.module.rules.push({
        test: /\.scss$/,
        use: ['style-loader', 'css-loader', 'sass-loader'],
      });
    config.module.rules.push({
      test: /\.(ts|tsx)$/,
      use: [
        {
          loader: require.resolve('awesome-typescript-loader'),
        },
      ],
    });
    config.module.rules.push({
      test: /\.svg$/,
      include: path.resolve(__dirname, '../'),
      loader: 'svg-inline-loader'
    });

    config.resolve.extensions.push('.ts', '.tsx')
    return config;
};

^_^

【讨论】:

    【解决方案2】:

    在 storybook-start 脚本中配置静态文件夹对我有用:

    文档:Static Files Via Directory

    您还可以配置一个目录(或目录列表) 启动 Storybook 时搜索静态内容。你可以做 带有 -s 标志的那个。

    //package.json
    {
    "scripts": {
        "start-storybook": "start-storybook -s ./public -p 9001"
      }
    }
    

    祝你好运……

    【讨论】:

    • 对我不起作用。我有带有文件加载器的 CRA 项目:错误:....png 不在项目 src/director 范围内
    • @Luke359,您可能必须遵循 create-react-app 文档,了解他们对静态文件的建议。
    • 感谢您的评论。我已经试过这个gist.github.com/shilman/bc9cbedb2a7efb5ec6710337cbd20c0c一步一步,没有错误,除了那个该死的图像
    • @Luke359,您可以克隆此存储库github.com/appsparkler/reacts。转到 luke/storybook 分支,执行 yarn installyarn start。有一个Image Story,您可以验证从公共文件夹呈现的图像。
    • 谢谢。实际上我发现了问题,导入路径是从 localhost/public 导入的,但构建只包含来自 public 文件夹的内容,因此要访问 public/images 我只需要编写图像
    【解决方案3】:

    解决这个问题:

    我有以下文件夹结构??

    # root_folder
    
    .storybook/
    src/
    package.json
    ...
    ...
    
    

    我的图片文件夹位于src/resources/images/my_image.jpg

    我通过添加-s ./ 来解决这个问题,如下 ??

    "storybook": "start-storybook -s ./ -p 9001"
    

    希望对你有帮助:) ??

    【讨论】:

    • 感谢您的宝贵时间。但是我已经解决了这个问题并在上面自己写了答案。再次感谢。
    猜你喜欢
    • 2021-01-09
    • 1970-01-01
    • 1970-01-01
    • 2014-04-19
    • 2015-10-27
    • 1970-01-01
    • 2021-12-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多