在“ storybook js”中提供静态文件

Van*_*ano 5 typescript reactjs webpack storybook

我正在使用故事书文档,无法从资产文件夹加载图像。正如文档所述:“如果使用自定义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;
};
Run Code Online (Sandbox Code Playgroud)

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"
Run Code Online (Sandbox Code Playgroud)

这是毛线故事书之后 webpack调试

似乎故事书文档中缺少某些内容,或者我做错了什么?谢谢任何可以帮助我解决这个问题的人。^ _ ^

Aka*_*ash 5

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

文档:通过目录的静态文件

您还可以在启动 Storybook 时配置一个目录(或目录列表)来搜索静态内容。您可以使用 -s 标志来做到这一点。

//package.json
{
"scripts": {
    "start-storybook": "start-storybook -s ./public -p 9001"
  }
}
Run Code Online (Sandbox Code Playgroud)

祝你好运...


Van*_*ano 4

如果有人遇到同样的问题,请尝试下面的代码(我正在使用:storybook,react - 无需创建react应用程序,typescript):

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

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

declare module "svg-inline-react" 
Run Code Online (Sandbox Code Playgroud)

然后我将此文件添加到 tsconfig.json 中,如下所示:

"files": [
  "./custom.d.ts"
],
Run Code Online (Sandbox Code Playgroud)

之后,错误 - “无法找到 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;
};
Run Code Online (Sandbox Code Playgroud)

^_^