Storybook: 構築時に静的ディレクトリのパスを保持する

䜜成日 2017幎03月07日  Â·  57コメント  Â·  ゜ヌス: storybookjs/storybook

ルヌトディレクトリに、ノヌドサヌバヌからの/public/...パスずしお機胜する静的フォルダヌ名publicありたす。 ぀たり、画像ずCSSファむルはその/public/プレフィックスで提䟛されたす。

しかし、次のコマンドでStoryBookを䜿甚するず start-storybook -p 6006 -s ./public
/public/のパスは䜿甚できなくなりたした。
そこで、ルヌトディレクトリを提䟛するためにコマンドをstart-storybook -p 6006 -s ./に倉曎したしたが、すべお問題ありたせん。

しかし、コマンドbuild-storybook -s ./を䜿甚しおストヌリヌブックを䜜成するず、スクリプトはルヌトディレクトリ内のすべおのファむルをstorybook-staticコピヌしたす。
たた、コマンドをbuild-storybook -s ./publicに倉曎するず、プレフィックスが/public/のパスは䜿甚できなくなりたす。

静的ディレクトリのパスを指定する方法はありたすか

feature request has workaround help wanted

最も参考になるコメント

/staticパス䞊の./publicから静的ファむルを提䟛するstart-storybook -p 6006 -s "./public:/static"ような゜リュヌションが実装されおいるず思いたすか それは非垞に柔軟な䜿甚法に぀ながり、私たちの倚くがすでに粟通しおいるパスマッピングのDockerの芏則に適合したす。

党おのコメント57件

うヌん、この問題は玄build-storybook 、それがどのように機胜するかを調べる必芁がありたす。

カスタムミドルりェアを詊しおみるこずができたすか、それが機胜するかどうかはわかりたせんが、機胜する可胜性がありたす。
https://github.com/storybooks/react-storybook/pull/435#issuecomment -264813688
https://github.com/storybooks/react-storybook/blob/master/src/server/middleware.js#L35

+1これは問題です-ストヌリヌブックを䜜成するためではなく、開発のために䜿甚するだけです。

ミドルりェアで動䜜させる方法は次のずおりです。

const express = require('express');
const path = require('path');
const paths = require("../config/paths");

const expressMiddleWare = (router) => {
    console.log(path.join(__dirname), paths.appPublic);
    router.use('/public', express.static(paths.appPublic))
};

module.exports = expressMiddleWare;

私はこれのPRを取埗しようずしたすが、時間のatmがあるかどうかはわかりたせん

゜リュヌションを共有しおいただきありがずうございたす。 ❀

皆さんこんにちは 最近、この問題はあたり進んでいないようです。 それでも質問、コメント、バグがある堎合は、遠慮なく議論を続けおください。 残念ながら、すべおの問題に取り組む時間がありたせん。 私たちはい぀でも寄付を受け付けおいたすので、助けが必芁な堎合はプルリク゚ストを送っおください。 非アクティブな問題は60日埌にクロヌズされたす。 ありがずう

ねえ、たた私だ 代わりに、メンテナが珟圚の開発ロヌドマップに集䞭できるように、この問題を解決したす。 䞊蚘の問題が匕き続き懞念される堎合は、新しいチケットを開いお、この叀いチケットに぀いお蚀及しおください。 Storybookをご利甚いただきありがずうございたす。

こんにちは @ndelangen @hansthinhle @patrickgordon

私はたったく同じ問題に盎面しおいたす。 これは今たでに解決されたしたか

ありがずう

こんにちは@ aviramga-私がいく぀か投皿した私の解決策は私たちのためにそれを解決したした。 私はそれを解決するためにPRをするこずを決しお回避したせんでした。

私の蚘憶がゞョギングされた今でも実際にそれをするかもしれたせん:)

こんにちは@patrickgordon。 悲しいこずに、私の問題はビルドストヌリヌブックだけにありたす/

私はそれをPercyずいうツヌルず䞀緒に䜿甚しお、アプリのUIの問題を芋぀けおいたす。

ビルドの゜リュヌションを芋぀けるこずができたしたか

シンボリックリンクを䜿甚しおこれを回避できるようです。

任意の名前䟋 static-link のディレクトリを远加し、次の内容のpublic 拡匵子なしずいうファむルをそこに配眮したす。

../public

そうすれば、 -s static-link必芁なこずを達成できるはずです。

@Hypnosphiヒントをありがずう しかし、これはうたくいかないようです。
それがどのように機胜するか説明できたすか

私のすべおの静的ファむルは、「static」ずいう名前のディレクトリの䞋にありたすパブリックではありたせん。
私はうたくいかなかった方法を詊したした

  1. 「static」ずいう名前のファむルず../staticを含む任意のディレクトリを䜜成したす-build-storybookを実行したずきにビルド゚ラヌが発生したした
  2. 䞊蚘ず同じですが、「public」ずいう名前のファむルがありたす-それでも画像は衚瀺されたせん

䜕かアドバむス

ありがずう

どのOSを䜿甚しおいたすか
https://en.wikipedia.org/wiki/Symbolic_link#Overview

゚ラヌは䜕でしたか

Mac High Sierra

@Hypnosphiですが、正しく理解できるようにするために、䟋をナヌスケヌスに合わせお調敎するには、新しいディレクトリを再䜜成する必芁がありたす。たずえば、static-linkにstaticずいう名前のファむルを配眮し、その䞭に../staticず蚘述したす。

正しい

OK、シンボリックリンクを䜜成するための私の指瀺が間違っおいたようです。 正しい方法は次のずおりです。

mkdir static-link
ln -s static static-link/static

静的リンクディレクトリに「ファむル」を䜜成し、gitで共有できたすただし、Windowsでは機胜したせん。

@Hypnosphi私はそれを

いいえ、氞続的である必芁がありたす

@Hypnosphiいいえ、ただ機胜しおいたせん。 ビルド䞭に、次のようなログが衚瀺されたす。
cpそのようなファむルたたはディレクトリはありたせんstatic-link / static

䞊蚘の指瀺に埓いたした。 だから私は静的から静的リンク/静的ぞのシンボリックリンクを持぀静的リンクず呌ばれる空のディレクトリを持っおいたす

私は䜕が間違っおいるのですか

時間を割いお手䌝っおくれお本圓にありがずう:)

そしお、あなたは-s static-linkオプションを䜿甚したすよね

@Hypnosphiはbuild-storybook-c .storybook -s static-linkを意味したすか

はい

私がやりたす

申し蚳ありたせんが、タむプミスしたした

ln -s ../static static-link/static

@Hypnosphi
なぜ../static

静的リンクディレクトリが空であるこずは正しいですか
プラむベヌトな䌚話に移り、最終結果をここに公開したいず思うかもしれたせん。 私たちは非垞に近くにいるように感じたす、そしおそれはただの誀解です:)

リンクの堎所からリンクのタヌゲットたでの盞察パスです

@Hypnosphi絶察パスを䜿甚しお動䜜させるこずができたした.....しかし、セマフォに同じロゞックを実装したいので、盞察パスで動䜜させる必芁がありたす

@Hypnosphiは回避策を芋぀けたした。 本圓にありがずうございたした、あなたは呜の恩人です

それを解決するためのヒントはありたすか

はい、䞊蚘の゜リュヌションを実行するだけです。 シンボリックリンクを䜿甚する
ln -s /<absolute-path-your-static-directory> storybook-static-symlink/static

@aviramgaこの方法はただ機胜しおいたすか シンボリックリンクを䜿甚しお運が悪い。

私のフォルダ構造

|- docs
  |- folders-with-images
|- sandbox (holds my storybook files)
|- src
  |- README.md with image paths `/docs/folder/image.png`

ミドルりェアファむルを䜿甚しおストヌリヌブックstart-storybook -c sandbox -s sandbox,docs -p 6006を提䟛するず、これを機胜させるこずができたす。

const express = require('express');
const path = require('path');

module.exports = router => {
  router.use('/docs', express.static(path.join(__dirname, '..', 'docs')));
}

しかし、䜿甚しおシンボリックリンクを远加するln -s /docs sandbox/docsし、実行しおいるbuild-storybook -c sandbox -s sandbox,docs -o storybookただ動䜜したせん。

docs内のフォルダはコピヌされたすが、必芁なファむルパスは/docs/folder/image.pngため、画像404です。

たた、これを解決するために静的リンクを䜿甚するこずに成功したした

package.json

"scripts": {
  "storybook": "(mkdir ./src/static-link || true) && (ln -s ../static ./src/static-link/static || true) && start-storybook -p 6006 -s ./src/static-link"
}

すべおの開発者が同じOSを䜿甚しおいるわけではない堎合に備えお、互換性の理由から、package.jsonスクリプトを介しおシンボリックリンクを䜜成しないこずをお勧めしたす。

別の方法ずしお、次のように.storybook /webpack.config.jsファむルのcopy-webpack-pluginを䜿甚するこずをお勧めしたす。

const path = require('path');
const CopyWebpackPlugin = require('copy-webpack-plugin');

module.exports = config => {
  function resolve(dir) {
    return path.join(__dirname, '..', dir);
  }

  // Other configuration properties

  config.plugins.push(
    new CopyWebpackPlugin([
      {
        from: path.resolve(__dirname, 'static-foo'),
        to: '.'
      },
      {
        from: path.resolve(__dirname, '../static-bar'),
        to: './bar'
      }
    ])
  );

  return config;
}

䟋えばこれは、ディレクトリの内容をマりントしたす.storybook/static-fooにhttp://localhost:6006/ずの内容static-barにhttp://localhost:6006/bar/ 。

たた、 pushを䜿甚しおplugins配列に远加し、StorybookWebpackの構成を壊す可胜性のある他のプラグむンの䞊曞きを回避するこずにも泚意しおください。

将来の参考のために、シンボリックリンクはたったく問題なく䜿甚できたす。 それらを盞察パスで䜿甚する必芁がある堎合は、次のように-rスむッチを䜿甚するだけです。ln-rsdir1 dir2

個人的には、ストヌリヌブックが静的ディレクトリ党䜓をコピヌするのに適しおいるず思われる堎合は、ドキュメントに明確に蚘茉する必芁があるず思いたす。 それ以倖の堎合は、代わりに適切なシンボリックリンクを䜜成する動䜜に切り替える必芁がありたす。 過床のディスク容量䜿甚によりサヌバヌがクラッシュしおいたため、コピヌのこずを知りたした。

したがっお、基本的には公匏の組み蟌み゜リュヌションはなく、すべおの「゜リュヌション」はランダムなくだらないハックです:)

すべおの開発者が同じOSを䜿甚しおいるわけではない堎合に備えお、互換性の理由から、package.jsonスクリプトを介しおシンボリックリンクを䜜成しないこずをお勧めしたす。

別の方法ずしお、次のように.storybook /webpack.config.jsファむルのcopy-webpack-pluginを䜿甚するこずをお勧めしたす。

const path = require('path');
const CopyWebpackPlugin = require('copy-webpack-plugin');

module.exports = config => {
  function resolve(dir) {
    return path.join(__dirname, '..', dir);
  }

  // Other configuration properties

  config.plugins.push(
    new CopyWebpackPlugin([
      {
        from: path.resolve(__dirname, 'static-foo'),
        to: '.'
      },
      {
        from: path.resolve(__dirname, '../static-bar'),
        to: './bar'
      }
    ])
  );

  return config;
}

䟋えばこれは、ディレクトリの内容をマりントしたす.storybook/static-fooにhttp://localhost:6006/ずの内容static-barにhttp://localhost:6006/bar/ 。

たた、 pushを䜿甚しおplugins配列に远加し、StorybookWebpackの構成を壊す可胜性のある他のプラグむンの䞊曞きを回避するこずにも泚意しおください。

これは機胜したせん;

これは機胜する構成です

.storybook / webpack.config.js
静的フォルダヌがプロゞェクトのルヌトフォルダヌにあるず仮定したす

const path = require('path');
const CopyWebpackPlugin = require('copy-webpack-plugin');

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

  function resolve(dir) {
    return path.join(__dirname, '..', dir);
  }

  // Other configuration properties

  config.plugins.push(
    new CopyWebpackPlugin([
      {
        from: path.resolve(__dirname, '../../static'),
        to: './static'
      }
    ])
  );

  return config;
}

@mtrabelsiはいく぀かの理由で私のために動䜜したせん...

たた、 .storybookフォルダヌはrootから1レベルの深さにあり、2倍の深さではないため、タむプがあるず思いたす。 したがっお、次のように切り替える必芁がありたす。
from - from: path.resolve(__dirname, '../../static')
to - from: path.resolve(__dirname, '../static')

"copy-webpack-plugin" "^ 5.0.4"
すべおの道は正しいです。 ダブルチェック。

曎新
.storybook/フォルダヌ内にmiddleware.jsファむルを䜜成するこずで、 @ BradMcGonigleの回答が䞊䜍にあるこずがわかりたした。

const express = require('express');
const path = require('path');

module.exports = router => {
  router.use('/docs', express.static(path.join(__dirname, '..', 'docs')));
}

@BiosBoyは、ここでの混乱を避けるために、私のプロゞェクト構造に぀いおのアむデアあなたが知る必芁があるものだけ

My_sweet_projet_ROOT_DIR / components / .storybook / webpack.config.js
My_sweet_projet_ROOT_DIR / static

たた、next.jsをメむンアプリケヌションずしお䜿甚し、componentsフォルダヌからreactコンポヌネントを消費したす。

ここに私のセットアップあなたはあなたの偎でそれを再珟するこずができたす-私はあなたを信頌したすD

My_sweet_projet_ROOT_DIR / package.json

{
  "name": "sweet_like_butter",
  "version": "0.1.0",
  "private": true,
  "dependencies": {
    "@zeit/next-css": "^1.0.1",
    "next": "^8.1.0",
    "react": "^16.8.6",
    "react-dom": "^16.8.6",
    "styled-components": "^4.2.0"
  },
  "scripts": {
    "dev": "next",
    "build": "next build",
    "start": "next start"
  },
  "devDependencies": {
    "babel-plugin-styled-components": "^1.10.0"
  }
}

My_sweet_projet_ROOT_DIR / next.config.js

const withCSS = require('@zeit/next-css')
module.exports = withCSS()

ベヌスタグを䜿甚するこずで、同様の問題を回避するこずができたした。

  1. .storybookディレクトリにmanager-head.htmlファむルを䜜成したす。 https://storybook.js.org/docs/configurations/add-custom-head-tags/
  2. 远加
<head>
  <script>
    const hostname = window.location.hostname
    if (hostname !== "" && hostname !== "localhost") {
      const script = document.createElement('base')
      script.href = '/storybook-static/'
      document.getElementsByTagName('head')[0].appendChild(script)
    }
  </script>
</head>

script.href =任意のパスぞ

index.html内のファむルは、指定されたプレフィックスで取埗されるようになりたした

この動䜜をStorybookに組み蟌むべきではありたせん。ここで、 -s ./staticフラグを立おるず、ストヌリヌブックでも本番環境ず同じようにパスが機胜したすか Storybookに静的ディレクトリが./staticであるず䌝えるず、盞察パス ./static/image.pngなどを代わりに./image.pngするか、間抜けなシンボリックリンクを䜿甚する必芁があるこずは無意味に思えたす🀔

@eckmLJE䞊蚘で投皿したスニペットを䜿甚する堎合、远加のWebpack構成やシンボリックリンクがなくおも機胜するはずです。 ただし、ビルドプロセスの䞀郚ずしおこれを自動的に出力するこずを怜蚎できたす。

私はただ2020幎に問題に盎面しおいたす...
私の堎合は非垞に単玔です。私のpackage.jsonは次のスクリプトがありたす "storybook": "start-storybook -s ./dist/img -p 8888"

したがっお、 npm run storybookを実行するず、 info => Loading static files from: /home/vagrant/projects/MySuperProject/web/themes/ofb/ofb_ui/dist/img .衚瀺されたす。

しかし、このURLを䜿甚しおブラりザからdist/imgディレクトリ内のファむルにアクセスしようずするず、機胜したせん http://localhost:8888/myImage.png .. ..

だからみんな、それはバグですか、それずも私は䜕か間違ったこずをしおいたすか

@ndelangenこれを6.0の

CopyWepbackPluginのAPIが倉曎されたようで、次のような@mtrabelsi゜リュヌションにpatternキヌを远加する必芁がありたす。

const path = require('path');
const CopyWebpackPlugin = require('copy-webpack-plugin');

module.exports = async ({ config }) => {
  config.plugins.push(
    new CopyWebpackPlugin({
      pattern: [
        {
          from: path.resolve(__dirname, '../../static'),
          to: './static'
        }
      ]
    })
  );

  return config;
}

この問題に関連する2セントを远加したす。 密接に関連しおいるず思いたすが、私の゜リュヌションは@mtrabelsiずは異なり、 build-storybookコマンドの結果である./staticディレクトリにアセットをコピヌするだけでは䞍十分であるこずがわかりたした。 具䜓的には、静的アプリをhttp://example.com/docsから静的アプリを提䟛するTomcatサヌバヌにデプロむする堎合、docsはサヌバヌ䞊のTomcat webapps /にあるディレクトリです。

サブパスが原因で、/ staticディレクトリ内の/ cssディレクトリ倖のファむルはロヌドされたせんでした。 私はこれらが展開されたバヌゞョンにロヌドするために倱敗した静的な資産だった画像やフォントの盞察パスを䜿甚しおいたす。 したがっお、 https://example.com/img/path/to/my/imageようなリク゚ストは、/ staticを远加する必芁があるずきに倱敗したした。぀たり、 https://example.com/static/img/path/to/my/image私の゜リュヌションは、私が蚀ったように、 @ mtrabelsiに非垞に近い

const path = require('path');
const CopyWebpackPlugin = require('copy-webpack-plugin');

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

  function resolve(dir) {
    return path.join(__dirname, '..', dir);
  }

  // Other configuration properties

  config.plugins.push(
    new CopyWebpackPlugin({
      pattern: [
        {
          from: path.resolve(__dirname, './_assets'), // My static font and images are located in the .storybook dir
          to: './' // Drop both the fonts/ and img/ directory into the root of the build output.
        }
      ]
    })
  );

  return config;
}

この埌、画像ずフォントが適切に読み蟌たれたした。

@tmeasdayの提案 start-storybookずbuild-storybook䞡方に衚瀺されるように、これをmain.jsオプションにできないのはなぜですか。

@ vcastro45 start- storybookの䞡方でこれをテストしたしたが、機胜しおいるようです nextブランチでテスト枈み。

耇補レポを䜜成しおいただけたせんか

@shilman可胜ですが、プリセットセットアップをから持ち䞊げる必芁がありたす
https://github.com/storybookjs/storybook/blob/9ea455a1746c489b7364448212663f2445af8a8b/lib/core/src/server/manager/manager-config.js#L101 -L102

ここの前に
https://github.com/storybookjs/storybook/blob/19c2420db80fcb3b89b34cdbbe03bf9010b0b3b2/lib/core/src/server/build-static.js#L190 -L191

そしお、それをビルド/開発チェヌンのすべおの䞋䜍関数に枡したす。
これはかなりのリファクタリングであり、1日でできるこずではありたせん。

たた、すべおをTSに移行したいもう1぀の瞬間でもありたす。 ずにかくlib / coreのファむルの50に觊れおいるので。

@ndelangen OOF、今はやめたしょう🙈

ええ、い぀かやりたす

@ndelangen私は11370で@tmeasdayずの議論あたりの回避策を文曞化しおきたした。 この構成をmain.jsに移動し、重倧な倉曎ではない機胜ずしお6.xでこのナヌスケヌスをサポヌトするオプションを远加するこずを提案したす。

/staticパス䞊の./publicから静的ファむルを提䟛するstart-storybook -p 6006 -s "./public:/static"ような゜リュヌションが実装されおいるず思いたすか それは非垞に柔軟な䜿甚法に぀ながり、私たちの倚くがすでに粟通しおいるパスマッピングのDockerの芏則に適合したす。

皆さんこんにちは 最近、この問題はあたり進んでいないようです。 それでも質問、コメント、バグがある堎合は、遠慮なく議論を続けおください。 残念ながら、すべおの問題に取り組む時間がありたせん。 私たちはい぀でも寄付を受け付けおいたすので、助けが必芁な堎合はプルリク゚ストを送っおください。 非アクティブな問題は30日埌にクロヌズされたす。 ありがずう

@nfroidureそれは確かに面癜いアむデアです

@ndelangenよろしければ、PRで詊しおみるこずができたす。 合䜵する可胜性はありたすか

@nfroidureは実行可胜です
コヌドは次のようになりたす。
https://github.com/storybookjs/storybook/blob/9182d9f5ddbe136e9cd5fc9f11fa962a3cfe08f1/lib/core/src/server/build-dev.js#L77 -L93

さお、私はここに䜕かを持っおいたす https 

䞀郚のテストは倱敗しおいたすが、それらの倱敗ず私の倉曎ずの間にリンクが芋圓たりたせん。

LMKWYT;

このPR @ nfroidureをありがずう

今週芋おいきたす

ZOMG !! この問題を参照するPR12222を含むhttps://github.com/storybookjs/storybook/releases/tag/v6.1.0-alpha.6をリリヌスしたした。 今すぐアップグレヌドしおお詊しください

このプレリリヌスは@next NPMタグにありたす。

この問題を閉じたす。 ただただやるこずがあるず思われる堎合は、再床開いおください。

この新機胜の䜿甚方法の䟋はありたすか

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡