Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

update-storybook-commonjs-fix #3

Closed
wants to merge 1 commit into from
Closed

update-storybook-commonjs-fix #3

wants to merge 1 commit into from

Conversation

JU12000
Copy link

@JU12000 JU12000 commented Apr 14, 2022

This is the streamlined fix from my followup comment: storybookjs/storybook#11587

@JU12000
Copy link
Author

JU12000 commented Apr 14, 2022

(機械翻訳)これは上記のスレッドから更新された修正です。 必要に応じてマージします。 個人的には、前回書いたものよりきれいだと思います。

@AaronMaywood
Copy link
Contributor

@JU12000
Thanks for the feedback!
I did not expect to receive a PR.
I sincerely appreciate your kindness.

It has also inspired me to learn about CJS/ESM.
I can now understand that this method is reasonable.
I apologize for the delay in replying.

harupiyo pushed a commit that referenced this pull request Apr 18, 2022
技術的背景

1. SvelteKit はESM を採用している
package.json に "type": "module" と記載されている。
svelte.config.js もESM の書式を使っている。

2. Storybook はCommonJS
Storybook インストール時の .storybook/main.js にはこのように書かれていた
    "preprocess": require("../svelte.config.js").preprocess

3. `yarn storybook` でStorybook を動作させる時だけ、CommonJS としたい
  - Storybook は.storybook/ 下に設定ファイルを置くので、.storybook/package.json を用意し、"type": "commonjs" を記載するか、
  - .storybook/main.js を.storybook/main.cjs とするか

4. 3. において、.storybook/main.cjs から読み込む svelte.config.js(ESM) をCommonJSである main.cjs になじませる方法が必要となる

大前提として、CJSからESMを、その逆の利用も可能。その説明は次のpostd の記事にある。
    https://postd.cc/the-state-of-javascript-modules/

CJSからESMを利用する具体的な方法は、非同期import() を使うこと。

    https://postd.cc/the-state-of-javascript-modules/
	CJSは非同期import()を介してのみESMをインポートできる
	    ブラウザの挙動にできるだけ近づけるようにNode.jsによってESMは非同期でロードされます。
	    そのため、ESMの同期 require() は不可能となります。その結果、ESMに依存する全ての関数も非同期である必要があります。

以下の import().then() にあたる。
    "preprocess": require('../svelte.config.js')
	↓
    "preprocess": import('../svelte.config.js').then((module) => { return module.preprocess; })
@harupiyo harupiyo closed this in d3f45fb Apr 18, 2022
@JU12000 JU12000 deleted the update-storybook-commonjs-fix branch April 18, 2022 17:28
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants