åžæãããœãªã¥ãŒã·ã§ã³ã説æããŠãã ãã
Storybookã¯éåžžã«ã³ã³ããŒãã³ãã«çŠç¹ãåœãŠãŠãããStencilã¯éåžžã«ã³ã³ããŒãã³ãã«çŠç¹ãåœãŠããã¬ãŒã ã¯ãŒã¯ã§ããããã Stencil.jsã®ãµããŒããåžæããŸãããããã®ããŒã«ã¯äºãã«éåžžã«ããè£å®ãåãã§ãããã
æ©èœãå®çŸããã®ãæ¯æŽã§ããŸããïŒ
ã¯ããã§ããŸã...
ïŒ1870ãšïŒ3423ã«è€è£œããŸãã ããã§è°è«ãç¶ããŸããã
çŸåšã®ã¹ãã³ã·ã«ãšSB5çšã®æ°ããã¹ã¿ãŒã¿ãŒãã«ããäœæããŸã
@ Edd-Stricklandã¯stenclãµããŒãããŒãžã§ã³ã§äœæ¥ãããð
ã¹ãã³ã·ã«ä»ãã®ããªããŒã¹ã¿ãŒã¿ãŒãææ°ããŒãžã§ã³ã®SBã«ã¢ããã°ã¬ãŒãããŸãããããªããŒãåé€ããã¹ãã³ã·ã«ã³ã³ãã€ã©ãŒãè¿œå ããã®ã«å©ããå¿ èŠã§ãã
ããã
@ Edd-Stricklandæ å ±ã®ããã«ããã®ãããžã§ã¯ãã§ã¯ãã¹ã¿ãŒã¿ãŒã§è¡ã£ãããã«Storybookå ã«Stencilãå®è£ ããŸããïŒ https ïŒ
Storybookã®HTMLã¹ã¿ãŒã¿ãŒã䜿çšããŸããã
ä»ã®ãšããStorybookïŒStencilã§ãç§ã¯ãã ããªããã°ãªããŸããã§ããïŒ
ç§ãæãäž»ãªåé¡ã¯ãã¹ããŒãªãŒå ã«ã€ã³ããŒããããJavaScriptãã¡ã€ã«ãåŠçããããã®Storybookã«ããWebpackã®äœ¿çšã§ãã çæ³çãªã¯ãŒã¯ãããŒã¯ãWebã³ã³ããŒãã³ãã®JSãã¡ã€ã«ã®ã¿ãã€ã³ããŒãããããšã§ãã
ãããããã¯ä»¥åã«è¡ã£ãããšã§ãããããªããŒããŒãžã§ã³ã§ã¯ããããæå³ããã®ã¯ããã¬ãŒã³ãªéçW / Cå®è£ ãšããŠã€ã³ããŒãããããšã§ãå¶éãæããã¹ããŒãªãŒã«æ¯åæŽæ°ããå¿ èŠããããšããããšã§ãã
ããã«ã¡ã¯ãã¹ãŠãç§ã¯ã¹ãã³ã·ã«component
ã¿ã€ãã®ãããžã§ã¯ãã«ã€ã³ã¹ããŒã«ã§ããã©ãããŒãäœæããŸããã ããã圹ã«ç«ãŠã°å¹žãã https://github.com/nisheed2440/stencil-storybook-wrapper
æææ¥ã«ãã¹ãããŸãã ããã§ããŸãã ïŒïŒ
ããã¯ã¹ããŒãªãŒããã¯ã®å ¬åŒéšåã«ãªããŸããïŒ ç§ã¯ãããåå®ã«å¿ èŠãšããŠããŸãïŒ
@otwç§ãã¡ã¯è©Šã¿ãŠããŸããããªãã¯ç§ãã¡ãå©ããããšãã§ããŸããïŒ
@ndelangenç©äºããã¹ããããã£ãŒãããã¯/ãã°ã¬ããŒããæäŸã
ããã¯LitElementïŒããã³äžè¬çãªWebã³ã³ããŒãã³ãïŒã§æ©èœããŸããããããšãã¹ãã³ã·ã«ã ãã§æ©èœããŸããïŒ
@ nisheed2440ããªãã®ã©ãããŒã¯ææãªããã§ããç§ã¯ãããããã«ãã¹ãããŸãïŒ ããããStorybookã«ãã£ãŠææžåãããããã€ãã£ããçµ±åãããããšã¯çŽ æŽãããããšãããããŸããð
@ nisheed2440ç§ã¯ãšãŠãå¿ããã£ãã§ãïŒã¿ããªããããªããïŒããä»æ¥ã¯ããã®éåžžã«ããã©ããŒãžã§ã³ãããŒã«ã«ã§ãã¹ãããããã®éåžžã«å°ããªãŠã£ã³ããŠããããŸããããããŠããã¯æ¬åœã«è¯ãã§ãã æ¬åœã«ããŸããããŸãã
æ¥é±ããããæ¢åã®ãããžã§ã¯ãã«çµã¿èŸŒãã§ããããæ¢åã®ã¹ãã³ã·ã«ãŠãŒã¶ãŒ/ãããžã§ã¯ãã§ã©ã®ããã«æ©èœãããã確èªããããã«æéãè²»ããäºå®ã§ãã
ç§ã¯ä»æããããã¹ãããŸããããããŠãããããªãããŸããããŸãïŒ GJã»ããã¢ããã¯æ¬åœã«ç°¡åã§ãã ç§ã¯ããã€ãã®ã¢ããªã³ãã€ã³ã¹ããŒã«ããŠãã¹ãããŸããïŒ
import '@storybook/addon-backgrounds/register';
import '@storybook/addon-knobs/register';
import '@storybook/addon-actions/register';
import '@storybook/addon-notes/register';
ãã¹ãŠãæ£åžžã«æ©èœããã¢ããªã³ããã§1ã€ã®åé¡ãèŠã€ãããŸããhttps://github.com/storybooks/storybook/issues/5017ããããåé¿çããããããã¯ããã«ä¿®æ£ãããã¯ãã§ãã
ç§ã¯éå»2é±éãStencilJSãšStorybookã§éãã§ãèªåã®ãœãªã¥ãŒã·ã§ã³ãã«ããŒããã©ã€ãã¹ããªãŒã ãè¡ããŸããã ãã£ãšè¯ãæ¹æ³ããããšæããŸãããHMRãå ¥æããããšãã§ããã»ãšãã©ã®ãã©ã°ã€ã³ã¯ã»ãšãã©åé¡ãªãåäœããŸããã ãã£ã¹ããªãã¥ãŒã·ã§ã³ã¹ãã³ã·ã«ãã³ãã«ããããŒããŒãæ¹åãŸãã¯ã€ã³ããŒãããæ¹æ³ã«ã€ããŠããã£ãŒãããã¯ããå¯ããã ããã
https://www.youtube.com/watch?v=XwHtPw3izLE
ãããŠããããã¬ãã§ãïŒ ^ _ ^
https://github.com/MadnessLabs/enjin-components
@ nisheed2440ããã«ã¡ã¯ãç§ã¯ããªããšéåžžã«ãã䌌ãã¢ãããŒãã䜿çšããŠããããã¹ãŠãè²åœ©ãæåŸ
ããŠæ©èœããŠããŸãã ã¹ãã³ã·ã«/ã¹ããŒãªãŒããã¯ã§è²åœ©äœåãäœãããšãã§ããŸãããïŒ
å®è¡ãããšããã¹ãŠã®ã¹ããŒãªãŒãæ€åºãããŸããããã¹ãŠã®ã¹ã¯ãªãŒã³ã·ã§ããã¯ç©ºã§ãã ã¯ããããã¯ãµãŒããŒã§ã³ã³ããŒãã³ãã®ã¹ã¯ãªãŒã³ã·ã§ãããã¬ã³ããªã³ã°ããããšãããšãããããã¹ãã³ã·ã«ãæ¬ èœããŠããŸã
@ nisheed2440ãã®æ¬åœã«çŽ æŽãããåªåã«æè¬ããŸãã ããŸãããã°ãããã¯ããã®ããŒã ã«æ£ããæ¹åãžã®æå©ãªã¹ã¿ãŒããäžããã§ãããã ã¹ãã³ã·ã«ãšã¹ããŒãªãŒããã¯ã¯ãäºãã«çæ³çã§ãã
çããããã«ã¡ã¯ïŒ æè¿ããã®åé¡ã¯ããŸãé²ãã§ããªãããã§ãã ããã§ã質åãã³ã¡ã³ãããã°ãããå Žåã¯ãé æ ®ãªãè°è«ãç¶ããŠãã ããã æ®å¿µãªããããã¹ãŠã®åé¡ã«åãçµãæéããããŸããã ç§ãã¡ã¯ãã€ã§ãå¯ä»ãåãä»ããŠããŸãã®ã§ãå©ããå¿ èŠãªå Žåã¯ãã«ãªã¯ãšã¹ããéã£ãŠãã ããã éã¢ã¯ãã£ããªåé¡ã¯30æ¥åŸã«ã¯ããŒãºãããŸãã ããããšãïŒ
誰ãããããæŸãããã§ããïŒ
ç§ã®ããŒã ã¯ãå ±éã³ã³ããŒãã³ãã©ã€ãã©ãªã«StencilJS + Storybookã䜿çšããŠãããè²¢ç®ããããšæã£ãŠããŸãã ãã¶ãç§ãã¡ã®äœäººãã¯ãã®ããšãè»éã«æ»ãããšãã§ããŸã...
https://twitter.com/dboskovic/status/1120336958008348672ãªã©ãå€ãã®é¢å¿ãããããã§ã
ç°¡åãªåå©ã®1ã€ã¯ã @ popcorn245ã®æ§æãã¹ããŒãªãŒããã¯ããªã»ããã«ããã±ãŒãžåãã@storybook/preset-stencil
ããã±ãŒãžãå
¬éããããšã§ãã ãã®ããã®ããã¥ã¡ã³ããå®æãããå¿
èŠããããŸããã次ã®Storybook DocsãªãªãŒã¹ã§äœ¿çšããŠãããç°¡åã§ãã»ãšãã©ã®SBæ§æãå°æ¥ã©ã®ããã«æ©èœãããã瀺ããŠããŸãã
ãããæã«å ¥ããã人ã¯èª°ã§ãåãã§æ¡å ããŸãã
ã¡ãã£ãš@shilman ããšãŠãå€ãã®äººã ããããè奮ããŠããããšã«è奮ããŸããã ãã®ã¹ã¬ããã«ã¯ç§ãèŠã€ããããã€ãã®è¯ãç¹ããããŸãããããã䜿çšããããã«èŠçŽ ã®æååãè¿ããªããã°ãªããªããªã©ãããã«å€ãã®å°ããªãã°ããããŸãã
ã¯ããã«åªããå®è£ ã¯ãStencilã³ã³ãã€ã©ãã䟿ä¹ããReactã³ã³ããŒãã³ããšåæ§ã«JSXã®äœ¿çšãå¯èœã«ããŸãããããã¯MHOã§ãã
ãŸããStencil Oneã¯ããã€ãã®å€§ããªå€æŽãå ããŠåé€ãããããšããŠããããããã®å€æŽãã°ã«ã®ããèŠãå ¥ããŠãããã«åãçµãã§ãã人ããã€ãã©ã€ã³ã§äœãèµ·ãã£ãŠããããèªèã§ããããã«ããããšããå§ãããŸãã
https://github.com/ionic-team/stencil/blob/core-refactor/BREAKING_CHANGES.md
ãã®ã¹ã¬ããã¯ãç¹ã«@ popcorn245ã®æ§æã«éåžžã«åœ¹ç«ã¡ãŸããã å人çã«ç§ã¯@stencil/state-tunnel
ã䜿çšããŠããŸããããããã¯ãã®æ§æãå£ããŸããã 幞ããªããšã«ã次ã®ã³ãã³ããå®è¡ããããšã§ãããã€ãã®ãã€ããŒãªãããã¯ãã®èª¿æŽã§åäœãããããšãã§ããŸããã
npm i -D [email protected]
ãããŠããã.storybook/webpack.config.js
è¿œå ããŸãïŒ
const { existsSync, readdirSync } = require('fs');
const { resolve } = require('path');
const CopyPlugin = require('copy-webpack-plugin');
module.exports = ({ config }) => {
// 1. Transpile <strong i="11">@stencil</strong> modules with Babel
const babelLoader = config.module.rules.find(
({ use }) => use && use[0].loader === 'babel-loader'
);
babelLoader.exclude = [/node_modules\/(?!\@stencil).*/];
if (babelLoader.use[0].options) {
babelLoader.use[0].options.plugins = ['@babel/plugin-syntax-dynamic-import'];
}
// 2. Load JS & CSS from our components
config.entry.push(resolve(__dirname, '..', 'dist', 'MYCOMPONENTNAME.js'));
config.entry.push(resolve(__dirname, '..', 'dist', 'MYCOMPONENTNAME.css'));
const components = resolve(__dirname, '..', 'dist', 'collection', 'components');
readdirSync(components).map(file => {
jsFilePath = resolve(components, file, `${file}.js`);
try {
if (existsSync(jsFilePath)) config.entry.push(jsFilePath);
} catch (err) {
console.error(err);
}
cssFilePath = resolve(components, file, `${file}.css`);
try {
if (existsSync(cssFilePath)) config.entry.push(cssFilePath);
} catch (err) {
console.error(err);
}
});
// 3. Fix dynamic imports for Storybook
// IMPORTANT: webpack must be at 4.28 due to a bug. See here: https://github.com/webpack/webpack/issues/8656
config.plugins.push(
new CopyPlugin([
{
from: resolve(__dirname, '..', 'dist'),
to: resolve(__dirname, '..', 'node_modules', '<strong i="12">@storybook</strong>', 'core', 'dist', 'public'),
},
])
);
return config;
};
ããã«ã€ããŠãå®éšãéå§ããïŒä»ã®å Žæã§è¿°ã¹ãããã«ïŒ concurrently
ãšãïŒä»ã®ãšããïŒåé¡ãªãåäœããããã§ãã ã¹ãã³ã·ã«ãšã¹ããŒãªãŒããã¯ã®äž¡æ¹ã䜿çšããŠèµ·åããŠå®è¡ããããã«å¿
èŠãªãã¹ãŠãå«ãã¯ã€ãã¯ã¹ã¿ãŒã¿ãŒãããžã§ã¯ããäœæããŸããã ãã§ã«ææ°ã®ã¹ãã³ã·ã«ãªãªãŒã¹ã䜿çšããŠããŸãã
ããã§ããããã§ãã¯ããŠãã ããïŒ stencil-storybook-starter
@ fvaldes33ãããïŒ ã¹ã¿ãŒä»ãã å®éã«StencilOneããŒã¿çã«æŽæ°ãããšãããèšå®ã¯äŒŒãŠããŸããåºæ¬çã«ãã¹ããã¯Webpackã»ããã¢ãããå®å šã«äœ¿çšã§ããŸãã
ç§ã«ãšã£ãŠã®å¯äžã®éãã¯ããã«ãæéãéåžžã«éããStencilã§prodããŒãžã§ã³ã䜿çšããæ¹ãç°¡åã§ããããïŒç¹ã«ã°ããŒãã«ã¹ã¿ã€ã«ããã®ä»ã®ã€ã³ããŒãã§ïŒã stencil build --watch
ïŒdevã§ã¯ãªãprodïŒã䜿çšããããšã§ããã
@ fvaldes33ãã®ããã«preview-head.htmlã§build / components.jsãã©ã®ããã«åç §ã§ããŸããïŒ ãã«ãã¹ãæå®ããå¿ èŠããããŸãïŒäŸïŒ httpïŒ// localhost ïŒ3333 / build / components.jsïŒã ããããç§ã¯ãããããå¿ èŠã¯ãããŸããã
ïŒç§ã¯ããªãã®ã¹ã¿ãŒã¿ãŒã䜿çšããŠããŸããããæ°ããstorybook / htmlã€ã³ã¹ããŒã«ã§ã¹ãã³ã·ã«ã³ã³ããŒãã³ãã¹ã¿ãŒã¿ãŒã䜿çšããŠããŸãïŒ
ç·šéïŒ
wwwãã©ã«ãã§ã¯ãªãããŒã6006ã§ã¹ããŒãªãŒããã¯ãéå§ããŠããããšã«æ°ã¥ããŸããã åé¡ã解決ããŸããïŒ
ç§ãã¡ã®å€ããåæ§ã®è§£æ±ºçãæã£ãŠããããã§ãïŒç§ãå«ãhttps://github.com/jagreehal/stencil-boilerplateïŒããã¹ãã³ã·ã«ã³ã³ããŒãã³ããç·šéãããšãã«ããã/ã©ã€ãã¢ããããŒããæ¬åœã«æ¬²ããã§ãã çŸåšãã¹ããŒãªãŒããã¯ããªããŒãããã«ã¯ããã©ãŠã¶ãæåã§æŽæ°ããå¿ èŠããããŸãã
ãããå®äºããããã®èŠä»¶ã®ç®æ¡æžããªã¹ãã¯ãããŸããïŒ äœãæ§ç¯ããå¿ èŠãããããç¥ã£ãŠããã°ãåãã§ææ¡ããŸãã
çŸåšã®ç¶æ ã¯ã©ãã§ããïŒ è²¢ç®ã§ããŸããïŒ ãããèŠããã§ãïŒ
äžèšã®ããªã»ãããæäŸããããšãææ¡ããŸããã
誰ããäžèšã®ãã¿ãŒã³ã«åºã¥ããŠããªã»ãããäœæãããå Žåã¯ãã¹ããŒãªãŒããã¯åŽã§åãã§ãæäŒãããŸãã ç§ã¯ã¹ãã³ã·ã«åŽã«ç²ŸéããŠããŸããã
ç§ã¯èªåã®ãããžã§ã¯ãã欲ãã人ã®ããã«ããã«æçš¿ããŸããã æ©èœã¯æ¬¡ã®ãšããã§ãã
@Props
èªåããçæãæèŠããèãããã ããïŒ //github.com/DesignByOnyx/stencil-storybook-starter
@DesignByOnyxããã¯ããããã ã ããã«ã€ããŠãã€ãŒããã @storybookjs
èšåãããšãã¹ããŒãªãŒããã¯ã¢ã«ãŠã³ãããRTããŸãã ãããŠãããªããããã«ã€ããŠã®æçš¿ãæžãããã®ã§ããã°ãç§ã¯ããªããšäžç·ã«ãããå
¬è¡šããããã«åãã§åããŸãã ããã«ã¯ããªã倧ããªéèŠããããšæããŸãã
çŽ æŽãããä»äº@DesignByOnyx ïŒ ããã¯ããªã»ããã«å®å šã«é©åããŠããããã§ãïŒtadaïŒ
OKããã€ãŒãããŸããïŒãã€ãã¿ãŒã¯ããŸãããŸããïŒã ããã«ãç§ã¯ããã°ãæã£ãŠããŸããïŒ/ãããã誰ãããããå ¬éããããªããç§ã¯äœãããŸãšããŠããããã§ãã
ãããžã§ã¯ããæ©èœããŠããéãç§ã¯æ¥ãã§ãããäžç·ã«æããŸããããããŠæ¬åœã«ã«ã¹ã¿ãã€ãºããã®ãç°¡åã«ããŸããã§ããã åã ã®ã³ã³ããŒãã³ããã¬ã³ããªã³ã°ããããã«è€æ°ã®ãã¡ã€ã«ãããŒãããŠããŒãžããå¿ èŠããããããããã«ããã³ãŒãã®äžéšã¯éåžžã«è匱ã§ãã ããããã䜿ããããããããã«æéãè²»ããåã«ãããã€ãã®ãã£ãŒãããã¯ãæåŸ ããŠããŸãã
ããªã»ãããã©ã®ããã«è¡šç€ºãããã®ãç¥ãããã§ãã çŽ æŽãããã®ã¯ãåå¿ããªãJSXããªã»ããã§ãã ããã«ãããstorybook-htmlã®å€æ§æ§ã«å ããŠãã¬ã³ããªã³ã°ãšãã³ãã¬ãŒãã®çæãå°ãç°¡åã«ãªããã¹ãã³ã·ã«ãšã¯ããŸãé¢ä¿ããããŸããã ããã䜿çšå¯èœã«ããã«ã¯ãããã€ãã®ã¢ããªã³ãæŽæ°ããå¿ èŠããããŸããããã®åãçµã¿ã調æŽããã®ã«æé©ãã©ããã¯ããããŸããã ãããã«ãããç§ã«äœãã§ãããæããŠãã ããã
@DesignByOnyxããªããç§ãã¡ã®äžåã«https://discordapp.com/invite/UUt2PJb
ãã®äœåãStorybookããã°ã§å ¬éããããã¹ãã³ã·ã«ã³ãã¥ããã£ã§å®£äŒãããããæ¹æ³ã«ã€ããŠãã£ãšã話ãããããšæããŸãã
ç§ã¯ã¹ãã³ã·ã«ã®ããã«@storybook/html
ã§éãã§ããŠããã®çµéšã¯ã»ãšãã©ãããŸããããã åºæ¬çã«æ¬¡ã®ããšãè¡ããŸãã
concurrently
ã䜿çšããŠStorybookãµãŒããŒãèµ·åãã stencil build --watch
ã䞊è¡ããŠãèµ·åããŸãstorybook
ã-s dist
ãã©ã°ã§éå§ããŠãã¹ãã³ã·ã«dist
ãéçãã¡ã€ã«ãšããŠæäŸãããããã«ããŸãã次ã®ãããªã¹ã¯ãªããã¿ã°ãå«ããããã«.storybook/preview-head.html
ãæ§æããŸãã
<script type="module" src="/$PACKAGE_NAME/$PACKAGE_NAME.esm.js"></script>
<script nomodule="" src="/$PACKAGE_NAME/$PACKAGE_NAME.js"></script>
以äžã§ãïŒ ããã«äœ¿çšã§ããhtml
ãµããŒãã¯ããã¹ãŠã®Webã³ã³ããŒãã³ãã®ããŒãºã«å¯Ÿå¿ããŸãã
ç§ãèŠããã®ã¯ãã¹ããŒãªãŒãªãŒãµãªã³ã°åŽã®html
ããã±ãŒãžãšåããšã¯ã¹ããªãšã³ã¹ïŒããã³ã³ãŒãïŒãæã€@storybook/stencil
ãããªãã®ã§ããã
concurrently
ãæ§æããå¿
èŠããªãããã«ããŸãscript
ã¿ã°ãè¿œå ããŸããã®ãããªããšã«èå³ã¯ãããŸããïŒ ç§ã¯ã¹ãã³ã·ã«ãšã¹ããŒãªãŒããã¯ã§äŒç€Ÿã売åŽããŠããæäžã§ãããããå¢ããå¢ããšä»®å®ãããšãã¹ããŒãªãŒããã¯ãšã¹ãã³ã·ã«ãäžç·ã«ãã¬ã€ããããšã§ããã®ã¹ããŒãªãŒïŒé§æŽèœãèš±ããŸãïŒãæ¬åœã«çŽ æŽããããã®ã«ããããã®ãäœæ¥æéãããããŸãã
@DesignByOnyxãè¡ã£ãäœæ¥ã¯æ¬åœã«çŽ æŽãããã§ããããã®ãããã䜿çšããŠã¹ãã³ã·ã«ã³ã³ããŒãã³ãããéå§ãããã¹ãã³ã·ã«ã®ãéåžžã®ãããã¥ã¡ã³ããç¡èŠããå¿ èŠããããŸãã Storybookãããéåžžã®ãã¹ãã³ã·ã«ã¹ã¿ãŒã¿ãŒãããã®äžã«éããããšãã§ããããã±ãŒãžãæäŸã§ããå Žåã¯ãStorybookæ§æãæ¢åã®ã¹ãã³ã·ã«ã³ã³ããŒãã³ãã®ã»ããã«ç°¡åã«è¿œå ã§ããŸãã
çŽ æŽãããèŠçŽ@alexlafrosciaãããããšãã ããªãã®ææ¡ã¯éåžžã«çã«ããªã£ãŠãããšæããŸãã ã¹ãã³ã·ã«ãåæ§ç¯ããããšãã«HMRãèªåçã«èµ·åããŸãããïŒ ãããããªãããªãããã§ã¯ãªãã®ã§ããïŒ
@ igor-dvããªã»ããã®preview-head.html
ã«è¿œå ããããšã¯å¯èœã§ããïŒ
@Hypnosphiå€åããã¯ããªãã®ãã«ããã¬ãŒã ã¯ãŒã¯ã®åªåã®èå³æ·±ãäŸã§ãã ãã®å Žåããã³ã¬ãŒã¿ã¯ïŒæããã«ïŒå¿ èŠãããŸããããã³ã³ãã€ã©å šäœãå¿ èŠã§ãã
@alexlafrosciaããªãã®å Žåãã¹ããŒãªãŒã®äŸã¯ã©ã®ããã«èŠããŸããïŒ
ç§ãåããŠããäŒç€Ÿã§ã¯ãStorybookHTMLããã³StencilJSããã±ãŒãžã§ãã°ããéãã§ããŸãã åãã§è²¢ç®ãããŠããã ããŸãïŒ
@alexlafrosciaéåžžã«çŽ æŽãããã¢ã€ãã¢ã§ãã確ãã«ããã®ã³ã³ãã€ã©ãå®å šã«ãµããŒãããã®ã¯çŽ æŽãããããšã§ãã ä»ã®ã¢ã€ãã¢ã¯æ¬¡ã®ãšããã§ãã
ãã®èšäºã§ã¯ãStencilJSã®é²è¡äžã®ããŒããããïŒ 2019幎ç§ã®ã¹ãã³ã·ã«ããŒããããã«ã€ããŠèª¬æããŸãã ç¹ã«ïŒ
ãããªãã¯ã³ã³ãã€ã©API
ç§ãã¡ãçŠç¹ãåœãŠãŠãããã1ã€ã®åéã¯ãã³ã³ãã€ã©ãŒããã©ãŠã¶ãŒå ã§åäœããä»ã®ããŒã«ã§äœ¿çšã§ããããã«ããããšã§ãã StackblitzãCodeSandboxãWebComponents.devãªã©ã®ããã€ãã®çŽ æŽãããããŒã ãšãã§ã«ååããŠããŸããã æäžäœã¬ãã«ã§ã¯ãã³ã³ãã€ã©ã¯NodeJSç°å¢äžã§å®è¡ããªããŠããã§ã«åäœããŠãããããæè¡çã«ã¯ããã¯äž»èŠãªãªãã¡ã¯ã¿ãªã³ã°ã§ã¯ãããŸãããããã以äžã«ãæ£ããAPIãå ¬éããã ãã§ãã
ãŸããRollupãParcelãWebPackãBazelãªã©ã®ä»ã®NodeJSããŒã«ã§ã³ã³ãã€ã©ãŒãç°¡åã«äœ¿çšã§ããããã«ããããã®æ¹åç¹ãæ°å€ãèŠãããŸãã ãªã³ã©ã€ã³ããŒã«ã§ããNodeJSç°å¢ã§ãããããŒã«ã®ä¿å®è ã§ãããã¹ãã³ã·ã«ã³ã³ãã€ã©ã®å®è£ ãæ€èšããŠããå Žåã¯ããæ°è»œã«ãé£çµ¡ãã ãããåãã§ãµããŒããããŠããã ããŸãã
圹ã«ç«ã€ãããããŸããïŒ
ã¹ãã³ã·ã«ãåæ§ç¯ããããšãã«HMRãèªåçã«èµ·åããŸãããïŒ ãããããªãããªãããã§ã¯ãªãã®ã§ããïŒ
@shilmanç§ãæã£ãŠããã»ããã¢ããã§ã¯ãStorybookãšStencilã®éã«ãå®éã®ãæ¥ç¶ããªãããã<script>
ã¿ã°ã§ãã
ããªãã®å Žåãç©èªã®äŸã¯ã©ã®ããã«èŠããŸããïŒ
@Hypnosphiãããã¯æ¬¡ã®ããã«ãªããŸãïŒ npm init stencil
ãšãã«äœæããåæããã±ãŒãžã§Stencilãçæããããã©ã«ãã®my-component
ã¹ããŒãªãŒ
import { document, console } from 'global';
import { storiesOf } from '@storybook/html';
storiesOf('My Component', module)
.add('without a middle name', () => `
<my-component
first="Alex"
last="LaFroscia"
></my-component>
`)
.add('with a middle name', () => `
<my-component
first="Alex"
middle="Robert"
last="LaFroscia"
></my-component>
`);
StencilJS JSXæ©èœïŒçŸæç¹ã§ã¯Preactã«åºã¥ãïŒã䜿çšããŠãããä¿å®ããããæ¹æ³ã§ã¹ããŒãªãŒãäœæããŸãã ãã¬ãŒã³ãªå€ãJSããã³ãã¬ãŒããªãã©ã«ã䜿çšããã®ã¯é¢åãããããŸãã...
@darondelã¹ããŒãªãŒãªãŒãµãªã³ã°ãã¡ã€ã«ã«JSXãå«ãŸããŠããªããšããéçºè
ã®çµéšã«é¢ããæžå¿µã«å®å
šã«åæããŸãã ç§ã¯éå»ã«@storybook/html
ãå©çšå¯èœã«ãªãåã«ãã®ã¢ãããŒãã䜿çšããåé¡ã®ãªãReactãšã¯ã¹ããªãšã³ã¹ã䜿çšããŸããã
ç©äºããããã©ã«ããã®html
ãšã¯ã¹ããªãšã³ã¹ã«ã§ããã ãè¿ã¥ããããšããããšã®äžéšã¯ãã¹ããŒãªãŒãHTMLã®èŠ³ç¹ããå®éã«ãããã䜿çšããæ¹æ³ã«é¢ããããã¥ã¡ã³ããšããŠæ©èœããããã«ããããšã§ããå°ãªããšãç§ã®çµç¹ã§ã¯ãä»ã®å Žæã§ã¯äœ¿çšãããŠããŸããïŒç§ãã¡ã¯äž»ã«Ember.jsã·ã§ããã§ãïŒã
ãã³ãã¬ãŒãã¿ã°ã¯çŽ æŽãããäœéšã§ã¯ãªããšãã£ããããŸãããã htm
ãããªãã®ãè¯ãéžæè¢ã«ãªããšæããŸãã ãŸããå¿
èŠãªãã«ãã¹ãããããªãããããã«ãããã»ã¹ãçŽ æŽãããã·ã³ãã«ã«ä¿ãããŸããããããªã©ãšã®å¯Ÿè©±ã容æã«ãªãå¯èœæ§ããããŸãã
ãŸãã次ã®DocsPageã®ãããªãã®ãšçµ±åããããšããã®ãé¢çœããããããªããšæã£ãŠããŸããïŒ @DesignByOnyxã«ãã£ãŠãã§ã«è¡ãããŠããäœæ¥ã®äžéšãããã§åœ¹ç«ã€å¯èœæ§ãããã®ã§ãã¹ãã³ã·ã«ã³ã³ããŒãã³ãã®ãã¡ã¿ããŒã¿ããèªã¿åã£ãŠããã¥ã¡ã³ãæ å ±ãèªåçã«çæããæããŸãã ãããããv1ãã®æžå¿µã§ã¯ãããŸãããããv1.1ããèŠãã®ã¯æ¬åœã«ã¯ãŒã«ãªããšã§ãã ãã®ãªãŒãããã¢ããªã³ã®ãããªãã®ãäœããšããããªãã®ã¢ã€ãã¢ãæ¬åœã«å¥œãã§ããããã¯æ¬åœã«äŸ¿å©ã§ãããïŒ
æ¬æ¥Storybook5.2ã§ãªãªãŒã¹ãããDocsPagesã䜿çšããŠãå°éå ·ãªã©ã«é¢ããæ å ±ãã¹ãã³ã·ã«ããååŸããŠStorybookã«ã¬ã³ããªã³ã°ã§ãããã©ããã調æ»ããŸããã å¯èœã ãšæããŸãããStorybook with Stencilã䜿çšããŠãããã«å¿ èŠãªãæ¥çå€ãã®æãå容ããããã«èª¿æŽãããã¢ããªã³ãŸãã¯ããªã»ãããçšæããããšãã©ã®ããã«åœ¹ç«ã€ããæ確ã«åŒ·èª¿ããŠããŸãã
ä»é±ã¯ããå°ãç©äºãããã£ãŠãäœãããŸãšããããšãã§ãããã©ããã確èªããŸãã
@alexlafrosciaã¯ãããŸããŸãªãã¬ãŒã ã¯ãŒã¯ããã®ããŒã¿ãéä¿¡ããæ¹æ³ãæšæºåããããšèããŠããŸãã JetbrainsïŒweb_typesïŒcc @elevatebart ïŒããäœãé¢çœããã®ãèŠãããšããããŸãããŸãã @ atanassterããã®é åã§ãããã©ãŒãã³ã¹ã®ããã«JSONãã¡ã€ã«ã«propã¿ã€ãããã£ãã·ã¥ããäœæ¥ãè¡ã£ãŠããŸãã 6.0ã§ããããã¹ãŠãçµ±åããå¿ èŠããããšæããŸã
ç§ã¯Jetbrainsã®ä»äºã«ç²ŸéããŠããŸãã-ç§ã¯ããããã§ãã¯ããå¿ èŠããããŸãïŒ ã¬ãã¥ãŒã«åœ¹ç«ã€å ·äœçãªæ å ±ãããã°ãç§ã®æ¹æ³ã§éã£ãŠããã ããã°å¹žãã§ãã
Stencilã®å Žåããæåã®çãã¯ãStencilãã«ãããã»ã¹ã§JSONããã¥ã¡ã³ããStencilStorybookã¢ããªã³ã§ããç¥ãããŠããå ŽæãŸãã¯æ§æå¯èœãªå Žæã«åºåããããšã§ãã ãã®ãªããžã§ã¯ãã«ã¯ãäºæ³ãããå°éå
·ãæŸåºãããã€ãã³ããããã³åã³ã³ããŒãã³ãã®readme
ãã¡ã€ã«ã®å
容ã«é¢ãããã¹ãŠã®æ
å ±ãå«ãŸããŠããŸãïŒèªåçæãããå°éå
·ã®ããã¥ã¡ã³ãã¯å«ãŸããŠããŸããïŒã StorybookDocsPageã«ãã®JSONãã¡ã€ã«ããã®æ
å ±ãå
¥åããããã®æ¬åœã«èª¬åŸåã®ããã¹ããŒãªãŒãæ§ç¯ã§ãããšæããŸãã
ãã®ãã¡ã€ã«ããã®åºåã®äŸ
{
"timestamp": "2019-09-18T14:30:38",
"compiler": {
"name": "@stencil/core",
"version": "1.3.2",
"typescriptVersion": "3.5.3"
},
"components": [
{
"tag": "fluid-banner",
"encapsulation": "shadow",
"readme": "# fluid-banner\n\nThis is the contents of the README!\n",
"docs": "This is the contents of the README!",
"docsTags": [],
"usage": {},
"props": [],
"methods": [],
"events": [],
"styles": [],
"slots": []
},
{
"tag": "fluid-button",
"encapsulation": "shadow",
"readme": "# fluid-button\n\n\n",
"docs": "",
"docsTags": [],
"usage": {},
"props": [
{
"name": "destructive",
"type": "boolean",
"mutable": false,
"attr": "destructive",
"reflectToAttr": false,
"docs": "Whether to display in the `destructive` style",
"docsTags": [],
"default": "false",
"optional": false,
"required": false
},
{
"name": "disabled",
"type": "boolean",
"mutable": false,
"attr": "disabled",
"reflectToAttr": false,
"docs": "Whether the button should be treated as `disabled`",
"docsTags": [],
"default": "false",
"optional": false,
"required": false
},
{
"name": "plain",
"type": "boolean",
"mutable": false,
"attr": "plain",
"reflectToAttr": false,
"docs": "Whether to display in the `plain` style",
"docsTags": [],
"default": "false",
"optional": false,
"required": false
},
{
"name": "primary",
"type": "boolean",
"mutable": false,
"attr": "primary",
"reflectToAttr": false,
"docs": "Whether to display in the `primary` style",
"docsTags": [],
"default": "false",
"optional": false,
"required": false
},
{
"name": "size",
"type": "\"large\" | \"medium\" | \"small\"",
"mutable": false,
"attr": "size",
"reflectToAttr": true,
"docs": "The size to display the button",
"docsTags": [],
"default": "\"medium\"",
"optional": false,
"required": false
}
],
"methods": [],
"events": [],
"styles": [],
"slots": []
}
]
}
ããã¯äžçš®ã®ããã¯ã§ãïŒJSONåºåãdist/output.json
ã«æžã蟌ãã§ããã fetch
ã䜿çšããŠãã¡ã€ã«ãååŸããŸãïŒãããªãŒããŒã©ã€ãããã ãã§Storybookã³ã³ããŒãã³ãã®DocsPageã¬ã³ããªã³ã°ãååŸã§ããŸããã DocsPage
ã³ã³ããŒãã³ããåãããšãã§ããã¹ãããå°éå
·ã
å°éå
·ã®è¡šã¯å®ç§ã§ã¯ãããŸããããããªãè¯ãã§ãã ã¹ãã³ã·ã«åºåã¯ãããŒãã«ãæåŸ
ãããã¹ãŠã®å°éå
·ãæäŸãã次ã«ããã€ããæäŸããŸãã ã³ã³ããŒãã³ãã®readme.md
ã«ãããã®ã¯ãã¹ãŠããã¡ã€ã«ã®å
é ã«ã¬ã³ããªã³ã°ãããŸãã
èªåã§è©ŠããŠã¿ããå Žåã¯ããããç§ãæžãã代æ¿ã®
page
ã³ã³ããŒãã³ãã§ããimport React, { useContext, useEffect, useState } from "react";
import { DocsPage, DocsContext } from "@storybook/addon-docs/blocks";
export const StorybookDocsPage = () => {
const docsContext = useContext(DocsContext);
const [payload, setPayload] = useState(null);
useEffect(function() {
fetch("./output.json")
.then(res => res.json())
.then(res => setPayload(res));
});
if (!payload) {
return null;
}
const component = payload.components.find(component =>
docsContext.selectedKind.includes(component.tag)
);
// Empty because we will use the whole component README
const titleSlot = () => "";
const subtitleSlot = () => "";
const descriptionSlot = () => component.readme;
const propsSlot = () => ({
rows: component.props.map(prop => ({
name: prop.name,
type: prop.type,
description: prop.docs,
required: prop.required,
defaultValue: prop.default
}))
});
return React.createElement(
DocsPage,
{ titleSlot, subtitleSlot, descriptionSlot, propsSlot },
null
);
};
æŽæ°ïŒããã«äžæ©é²ãã§ãã«ã¹ã¿ã ã¹ã¿ã€ã«ã®ããã¥ã¡ã³ããå«ã2çªç®ã®ããŒãã«ãååŸããããã«ãïŒã¹ãããããªãŒããŒã©ã€ãããã ãã§ãªãïŒã«ã¹ã¿ã DocsPage
å
šäœãå®çŸ©ããŸããã
ã«ã¹ã¿ã DocsPageã®ã³ãŒã
import { createElement as e, useContext, useEffect, useState } from "react";
import { DocsPage, PropsTable } from "@storybook/components";
import { H2, H3 } from "@storybook/components/html";
import {
Anchor,
Description,
DocsContext,
Preview,
Story
} from "@storybook/addon-docs/blocks";
function useStencilComponent() {
const docsContext = useContext(DocsContext);
const [payload, setPayload] = useState(null);
useEffect(function() {
fetch("./output.json")
.then(res => res.json())
.then(res => setPayload(res));
});
if (!payload) {
return undefined;
}
return payload.components.find(component =>
docsContext.selectedKind.includes(component.tag)
);
}
const DocsStory = ({
id,
name,
expanded = true,
withToolbar = false,
parameters
}) =>
e(
Anchor,
{ storyId: id },
expanded && e(H3, null, (parameters && parameters.displayName) || name),
expanded &&
parameters &&
parameters.docs &&
parameters.docs.storyDescription &&
e(Description, { markdown: parameters.docs.storyDescription }, null),
e(Preview, { withToolbar }, e(Story, { id, height: "auto" }, null))
);
export const CustomDocsPage = () => {
const docsContext = useContext(DocsContext);
const component = useStencilComponent();
if (!component) {
return null;
}
const { selectedKind, storyStore } = docsContext;
const stories = storyStore.getStoriesForKind(selectedKind);
const [primary, ...otherStories] = stories;
const propDocs = component.props.length
? [
e(H2, null, "Props"),
e(
PropsTable,
{
rows: component.props.map(prop => ({
name: prop.name,
type: prop.type,
description: prop.docs,
required: prop.required,
defaultValue: JSON.parse(prop.default)
}))
},
null
)
]
: [];
const styleDocs = component.styles.length
? [
e(H2, null, "Styles"),
e(
PropsTable,
{
rows: component.styles.map(style => ({
name: style.name,
description: style.docs
}))
},
null
)
]
: [];
const additionalStories = otherStories.length
? [
e(H2, null, "Stories"),
...otherStories.map(story =>
e(
DocsStory,
{ key: story.id, ...story, expanded: true, withToolbar: false },
null
)
)
]
: [];
return e(
DocsPage,
null,
e(Description, { markdown: component.readme }, null),
e(
DocsStory,
{ key: primary.id, ...primary, expanded: false, withToolbar: true },
null
),
...propDocs,
...styleDocs,
...additionalStories
);
};
ã«ã¹ã¿ã ããŒãžã§ã¯ãåã¹ããŒãªãŒã®ããã©ã«ãã®é«ãã500px
ã«èšå®ãããŠãããšããäºå®ãä¿®æ£ãããŠããŸããããã¯ãé«ãããŸãð
@alexlafrosciaããã¯ãããããããä»äºã§ãïŒ
åèãŸã§ã«ã5.3ã§å°éå ·ããŒãã«ã®ãã®ãäžè¬åããã€ããã§ãã å ·äœçã«ã¯ãVueã®ãããªãã¬ãŒã ã¯ãŒã¯ã«ã¯ã¹ããããšã€ãã³ãã®æŠå¿µããããããããããç¬èªã®ããŒãã«ã«åå²ããå¿ èŠããããŸãã ãã¶ãããªãã®ã¹ã¿ã€ã«ã®ä»äºã¯åãã¡ã«ããºã ã䜿ãããšãã§ããŸãã https://github.com/storybookjs/storybook/issues/8123
ç§ãåç §ããŠããJetbrainsãããžã§ã¯ãã¯ããã§ãïŒcc @piotrtomiakïŒïŒ https ïŒ
ç§ã¯ããã詳现ã«èª¿ã¹ãŠããŸããããããŠãããç§ãã¡ã«ãšã£ãŠæ£ãããã©ããããããŸããã ãã ãããããç§ãã¡ã®ãŠãŒã¹ã±ãŒã¹ãæºãããäœèšãªæéãããŸãããããªãå Žåã¯ãç¬èªã®æšæºãçºæããã®ã§ã¯ãªããæ¢åã®æšæºã䜿çšããããšæããŸãã
@shilmanã¡ã¿ããŒã¿æ
å ±äº€æã®æšæºãWebã³ã³ããŒãã³ãã©ã€ãã©ãªã«å°å
¥ããããã®ïŒJetBrainsïŒã®åãçµã¿ãweb-types
æšæºã¯ããªãæ°é®®ã§ãããVueã³ãã¥ããã£ãšãŠãŒã¶ãŒããããã€ãã®è¯å®çãªãã£ãŒãããã¯ããã§ã«èããŠããŸãã ç§ã¯Vueã³ãã¥ããã£ã§ä»æ§ãç©æ¥µçã«å®£äŒããŠããŸãããä»ã®ã³ãã¥ããã£ããé¢å¿ãåŒãã®ã¯ãšãŠãçŽ æŽãããããšã§ãã
web-types
JSONã¹ããŒãã«æ¬ ããŠãããã®ããããããããŸãããããã¯ãã¬ãŒã ã¯ãŒã¯ã«åºæã§ãããããããä»æ§ã«è¿œå ã§ããŸãã Vueåºæã®ã¢ã€ãã ã«ã¯ãããšãã°vue
ãã¬ãã£ãã¯ã¹ãä»ããŠããŸãã ãŸããCSSãµããŒããææžåããããã®ã»ã¯ã·ã§ã³å
šäœãæ¬ èœããŠããŸãã ãããã£ãŠã web-types
ã«ãã£ã³ã¹ãäžãã䟡å€ããããšæããå Žåã¯ãåé¡ãå ±åããããäžè¶³ããŠããæ©èœã®PRãäœæãããããŠãã ããã
ã³ã³ããŒãã³ããweb-types
圢åŒã§ææžåããããšã®å¯äœçšã¯ãéçºè
ãããââãžã§ã¯ãã«ã©ã€ãã©ãªãå«ããå Žåã«ãåªããã³ãŒãè£å®ã«ãªããŸãã è¿ãå°æ¥ããã¹ãŠã®ãã¬ãŒã ã¯ãŒã¯ã«å
±éã®web-types
æ©èœã«åºã¥ããŠããã®ãããªäžè¬çãªãµããŒããå®è£
ããããšãèšç»ããŠããŸãã ç§ã¯ããã©ãŒãããã®ãã倧ããªã³ãã¥ããã£ã®åãå
¥ãã«ãããä»ã®IDEããã©ãŒãããã®ãµããŒãããã©ããŒããããããã¹ãŠã®äººã«å©çããããããšç¢ºä¿¡ããŠããŸã:)
@alexlafrosciaçŽ æŽãããä»äºïŒ ã¹ãã³ã·ã«ãšã¹ããŒãªãŒããã¯ã®çµ±åïŒhttps://github.com/storybookjs/storybook/issues/7644ãšäžç·ã«ïŒã¯èŠæ ããè¯ãã§ã
ãã®åé¡ã«ãªã³ã¯ããŠããã ãããããšãããããŸãïŒ ç§ã¯ããšããšåæ§ã®éããã©ããŸããïŒæ¢åã®READMEãã¡ã€ã«ãäœããã®æ¹æ³ã§äœ¿çšããŠDocsPageã«çŽæ¥ãã«ããããšããŸããïŒããæçµçã«ã¯ãããŒãã«ã_å«ãŸããŠããªã_ãããStencilãããã¥ã¡ã³ãJSONãã¡ã€ã«ã«é 眮ããããŒã¿ã䜿çšããæ¹ãç°¡åã§ããããšãããããŸããå°éå ·ãšãã¹ãŠã®ãã®ïŒãã®ããŒã¿ã¯JSONãã¡ã€ã«ã®ä»ã®å Žæã«ãããæ§é åããŒã¿ã¯ããã«ã¹ã¿ã ããŒãã«ãäœæããã®ã«æé©ã§ããããïŒã
@alexlafroscia調æ»çµæãå
±æããŠããã ãããããšãããããŸãã CustomDocsPage
ããããã°ããã«ã¯ã©ãããã°ããã§ããïŒ
addParameters
è¿œå ããŠã¿ãŸããããã«ã¹ã¿ã ã§ã¯ãªãããã©ã«ãã䜿çšããŠããããã§ãã
.storybook/config.js
ã»ããã¢ãã
import { configure, addParameters } from '@storybook/react';
import { themes } from '@storybook/theming';
import { CustomDocsPage } from './docs.jsx';
addParameters({
options: { theme: themes.dark },
docs: { page: CustomDocsPage }
});
configure(require.context('../src', true, /\.(story|stories)\.(mdx)$/), module);
component.story.mdx
### Web Component
<Story name="WC">
<component-name name="test"></component-name>
</Story>
CustomDocsPage
ã䜿çšããªããŠããWCèªäœã¯ã¹ããŒãªãŒããã¯ã®ããã¥ã¡ã³ãããŒãžã«èªã¿èŸŒãŸããŸãã
ã³ã³ããŒãã³ãããããã°ããæ¹æ³ã¯ãããŸããïŒ ãã°ãè¿œå ããŠã¿ãŸããããäœã衚瀺ãããŸããã
åãã£ãŠæè¬ããŸãã
ç§ããã®åé¡ã«ééããŸãã-ãã³ã³ããŒãã³ããã¬ãã«ã§DocsPage
ã³ã³ããŒãã³ãããªãŒããŒã©ã€ãããå¿
èŠããããŸãã
https://github.com/storybookjs/storybook/blob/next/addons/docs/docs/docspage.md#replacing -docspage
@storybook/html
ãjsxã§åäœãããããšã¯å¯èœã§ããïŒ ã¹ãã³ã·ã«ã³ã³ããŒãã³ãã®ã¹ããŒãªãŒãæžãã®ãã¯ããã«ç°¡åã«ãªããŸãã å
¥åããŠãªãŒãã³ã³ããªãŒããã document.createElement
ã倧ããªãã³ãã¬ãŒãæååã䜿çšããå¿
èŠã¯ãããŸããã reactããã±ãŒãžã䜿çšããŠäžéšã«// @jsx
ãä»ããŠtypescriptãã ãŸãããšããŸããããããŸããããŸããã§ããã
@vidarcããªããããããããšãã®ãšã©ãŒã¯äœã§ãããïŒ ã«ã¹ã¿ã ã®babelèšå®ã¯ãããŸããïŒ
ããŸãã«ã¹ã¿ãã€ãºããŠããŸããã Webpackã«ããã€ãè¿œå ãããŸããã æåã®typescriptã¯Cannot find name 'h'
ã«ã€ããŠæå¥ãèšããŸãã ç§ã®tsconfigã«ã¯jsx = reactãšjsxFactory = hããããŸãã äžéšã®// <strong i="6">@jsx</strong> h
ãã©ã°ãèšå®ã䜿çšããŠãããã®èŠåãæ¶ãããšãã§ããŸãããDOMããŒããŸãã¯æååãè¿ããªãããã«ã¹ããŒãªãŒããã¯ãšã©ãŒãçºçããŸãã
è©ŠããŠã¿ãïŒ https ïŒ
ç·šéïŒjsxã§ããŸãæ©èœããŸãã ãããtypescriptã§åäœãããæ¹æ³ãç解ããããšã¯ã§ããŸãããïŒ/
@vidarc h
ããã€ããŒã¹ã¯ãªãããè¡šãå Žåãæååã§ãDOMèŠçŽ ã§ããªãã«ã¹ã¿ã ãªããžã§ã¯ããè¿ããŸã
vhtmlã¯è¡ãæ¹æ³ã®ããã§ã
åèãŸã§ã«ã web-components
ã¢ããªã®çä¿¡PRããããŸãïŒ //github.com/storybookjs/storybook/pull/8400
ããã®èª°ãããããããã®åé¡ãšã©ã®ããã«äº€å·®ãããã«ã€ããŠã³ã¡ã³ãã§ããŸããïŒ @vidarc @DesignByOnyx @ Edd-Strickland @alexlafroscia @daKmoR
ïŒ8400ã¯ãŸã ãã¹ãããŠããŸãããããã¹ãããåã«ã次ã®æ¹æ³ã§ãã©ã€ããã¹ãã³ã·ã«ãåäœãããããšãã§ããŸããã
start-storybook -s ./www
ãå®è¡ããŸããstencil build --dev --watch
ãå®è¡ããŸãã.storybook/config.ts
ãæŽæ°ããŠãHMRã§ãŠã£ã³ããŠããªããŒãããŸããconst req = require.context('../src/components', true, /.stories.tsx$/);
function loadStories() {
req.keys().forEach(filename => req(filename));
}
configure(loadStories, module);
if (module.hot) {
module.hot.accept(req.id, () => {
const currentLocationHref = window.location.href;
window.history.pushState(null, null, currentLocationHref);
window.location.reload();
});
}
ããã¯å°ãåä»ã§ãã
https://github.com/CleverCloud/clever-components/blob/master/stories/atoms/cc-button.stories.jsã®ãããªä»£æ¿æ¡ã調æ»ã§ããªãã£ãçç±ã¯ã import "./my-component"
ãimport { Component } from "@stencil/core"
以é倱æããããã§ãã
IE11ã§æ©èœããã¹ãã³ã·ã«ãšã¹ããŒãªãŒããã¯ã®å®è£
/æ§æãå®éã«æã£ãŠãã人ã¯ããŸããïŒ ç§ã¯ãã®ã¹ã¬ããã§èšåãããŠããåå®è£
ãéãæªãã£ãã®ã§è©ŠããŸããã
åžžã«æªåŠçã®ãããã¹æåŠã«ééããŸãTypeErrorïŒã¹ãã³ã·ã«ããŒãžã§ã³1.2.4-> 1.7.4ã®ç¡å¹ãªã¹ããŒã ã
@shilmanç§ã¯äžã®ã¹ãã³ã·ã«ã®ã³ã³ããŒãã³ããååŸããããšãã§ããŸããweb-components
ã¢ããªããããã ãã§åãããã«çã§ããããèªãã§ãããšãã£ãŠããããã«ç§ã«ã¯æããhtml
ãHMRã®doesnã®äžã€ã§ãããã¹ãã³ã·ã«ã³ã³ããŒãã³ãèªäœã®æŽæ°ã«åå¿ããŸãã
ReactãAngularãªã©ã®ããã«ãã¹ãã³ã·ã«ã³ã³ãã€ã©ãã¹ããŒãªãŒããã¯ã®å®è¡ã·ãŒã±ã³ã¹ã«çµã¿èŸŒãæ¹æ³ãããã°ãæ¬åœã«è¯ãã§ãããã
ã¹ãã³ã·ã«ã³ã³ããŒãã³ãããã©ã€ããã«ããæ¹æ³ãè©Šãç¶ããŸãããç§ãééããã¢ãŒããã¯ãã£äžã®åé¡ã¯ãç§ãééããªãéãã_ã¹ãã³ã·ã«ã³ã³ããŒãã³ããæ©èœããã«ã¯ã«ã¹ã¿ã ãã«ãã¹ããããå¿
èŠã§ãã_ïŒ stencil build --dev --watch
ïŒãããã³å®è¡æã®åçç©ã¯ãããŸããã
import { MyComponent} from "./MyComponent"
ãå®è¡ããããšããŸãããã @Component
ãå®éã«ã¯@stencil/core
ãããšã¯ã¹ããŒããããŠããªãããã倱æããŸãã å®éããã«ãã¹ãããã®äžéšãšããŠåé€ãããŸãã
ãããç¥ã£ãŠããç§ã®æ¬¡ã®ãã¹ãã¯ãReactãã€ã³ãã£ã³ã°ïŒhttps://github.com/ionic-team/stencil-ds-pluginsïŒã䜿çšããŠãã«ãã¹ããããç¶æããããšã§ããã代ããã«HMRããžãã¯ã眮ãæããŠïŒHTMLã®ä»£ããã«ïŒReactã¹ããŒãªãŒã䜿çšããŸãã
ããŸãããã°ãããã«ããã¹ããŒãªãŒããã¯ã®UXãReactã®ãã®ãšäžèŽããã¹ãã³ã·ã«ã¯ã³ã³ããŒãã³ãã®å®è£ ã ãã«ãªããŸãã
stencil build
ãéçºã¢ãŒãã§äžŠè¡ããŠå®è¡ããå¿
èŠãããã®ã¯äžçã®çµããã§ã¯ãªããšæããŸãã
package.json
ãããåæã«å®è¡ããæ¹æ³ããŠãŒã¶ãŒã«æ瀺ã§ããŸããå¯åéšåãå°ãªããœãªã¥ãŒã·ã§ã³ãæãŸããã§ãããããã§å€§æµã«ãªããªãããã«ããŸãããã ä»ã®ãšããAFAIKã¯ãä»ã§ã誰ããç¬èªã®ã¹ãã³ã·ã«ãµããŒããå±éããŠãããããã®å€ãã®äººã ã®ããã«ç©äºãç°¡çŽ åããã®ã«åœ¹ç«ã€çŽ æŽãããæ©äŒããããŸã...
åæã«äœ¿çšããããšã¯ãçŸåšç§ã®ããã«åããŠããããšã§ãã
確ãã«æ®µéçãªã¹ãããããããŸãã
ãŠãŒã¶ãŒãšããŠç§ãæ¹ãã€ããäž»ãªçç±ã¯ãããªããã¹ãã³ã·ã«ãåãããã«æ©èœããªãã£ãã®ããšããããšã§ããã
ç§ã®ãªã¢ã¯ã·ã§ã³ã¹ããŒãªãŒãšããŠãããã¯ã¹ãã³ã·ã«åºæã®ãã®ãªãã§ã¯è§£æ±ºã§ããŸãã
å€åããŸãã
æšã2019幎10æ31æ¥ã«ã¯ã17:02ãã€ã±ã«Shilman [email protected]
æžããŸããïŒ
ã¹ãã³ã·ã«ã®ãã«ããèŠæ±ããã®ã¯äžçã®çµããã§ã¯ãªããšæããŸã
éçºã¢ãŒãã§äžŠè¡ããŠå®è¡ïŒ
- ãããåæã«å®è¡ããæ¹æ³ããŠãŒã¶ãŒã«æ瀺ã§ããŸã
https://www.npmjs.com/package/concurrently in their package.json- ã¹ãã³ã·ã«ããªã»ããã¯ãèµ·åæã«ãã®ããã»ã¹ãçæãããã®åŸåŒ·å¶çµäºããå¯èœæ§ããããŸã
ããããŠãŒã¶ãŒããé ãããå Žåã¯ã·ã£ããããŠã³æã«å¯åéšåãå°ãªããœãªã¥ãŒã·ã§ã³ãæãŸããã§ãããããŸããããªãããã«ããŸããã
ããã§å倧ãªæµã«ãªããªããã ä»ã®ãšããAFAIKã¯èª°ãããŸã 圌ãã転ãããŠãã
çŸåšãç¬èªã®ã¹ãã³ã·ã«ãµããŒãããããæ¯æŽãã絶奜ã®æ©äŒããããŸã
ããã®å€ãã®äººã ã®ããã«ç©äºãåçŽåããŠãã ãã...â
ããªããã³ã¡ã³ãããã®ã§ããªãã¯ãããåãåã£ãŠããŸãã
ãã®ã¡ãŒã«ã«çŽæ¥è¿ä¿¡ããGitHubã§è¡šç€ºããŠãã ãã
https://github.com/storybookjs/storybook/issues/4600?email_source=notifications&email_token=AAADWTSIACMC4XSZHQWMAFTQRNW2DA5CNFSM4F7Y7BGKYY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN
ãŸãã¯è³Œèªã解é€ãã
https://github.com/notifications/unsubscribe-auth/AAADWTWS5RITQW46NXEJHZLQRNW2DANCNFSM4F7Y7BGA
ã
ããã«å¯Ÿãããã1ã€ã®ã¢ãããŒãã¯ãUIïŒã¹ããŒãªãŒããã¯ïŒããã¬ãã¥ãŒïŒã¹ãã³ã·ã«ïŒããæ確ã«åé¢ããããšã§ãã ã¹ããŒãªãŒããã¯ãã¹ã¿ã³ãã¢ãã³ã®å Žåãããã¯ãã§ã«å¯èœã§ãã
ããããã°ãã¹ããŒãªãŒããã¯ãäºåã«äœæããããšãã§ããŸãðªããã¯ãèµ·åæéã倧å¹
ã«ççž®ãããããšãæå³ããŸãã
ãããŠãéçºäžã¯ã¹ãââã³ã·ã«ãã«ãã®ã¿ã䜿çšããŸãïŒãã ããã¹ããŒãªãŒããã¯UIã¯åŒãç¶ã䜿çšããŸãïŒã ã€ãŸããã¹ããŒãªãŒããã¯ã®Webpackã»ããã¢ãããšã®çžäºéçšã«ã€ããŠèããå¿ èŠãªãã«ãã¹ãã³ã·ã«éçºãµãŒããŒããµããŒããããã¹ãŠã®æ©èœãå©çšã§ãããšããããšã§ãã
æã
ã¯ãã§ã«äœ¿çšããŠããã調æ»es-dev-server
ããããã«é»æºã«ãã¬ãã¥ãŒãweb-components
ã ç§ãã¡ã¯POCãæã£ãŠããŸã...ãããããŸã ããªãèããšããžããããŸãã
ãã ããã¹ãã³ã·ã«ã§ããŸã£ããåãã¢ãããŒããæ©èœãããšæããŸãã
誰ãã質åãããå ŽåããŸãã¯ã¹ãã³ã·ã«ã«ã€ããŠããã調æ»ãããã es-dev-server
ã䜿çšããŠåç
§ãããžã§ã¯ããäœæããã®ãæäŒã£ãããããå Žåã¯ã @ LarsDenBakkerã詳现ãå
±æããŠããããšç¢ºä¿¡ããŠããŸãð€
PSïŒããã¯ãã¹ãŠãUIããã¬ãã¥ãŒããåé¢ããããã®ãã£ãã«ã¡ãã»ãŒãžãåãããã®çŽ æŽãããiframeã»ããã¢ãããåããã¹ããŒãªãŒããã¯ã®ããã«ã®ã¿å¯èœã§ãð€
ããã¿ããª
ãã°ããããŠããããããããåããåŸãã¹ãã³ã·ã«çµ±åã¹ããŒãªãŒããã¯å®è£ https://github.com/Edd-Strickland/stencilbookã®ç§ã®ãªããžããªããã
ããã«ããŸãããã°ãreadmeãšpackage.jsonã§ã¹ã¯ãªããã確èªããããšã§ãã»ãšãã©ã®ããšãæããã«ãªãããšãé¡ã£ãŠããŸãã
ããã¯ãããã©ã¹ãã³ã·ã«ã¹ã¿ãŒã¿ãŒã³ã³ããŒãã³ããšããã©ã¹ããŒãªãŒããã¯ã®HTMLå®è£ ã䜿çšããŠæ§ç¯ãããŠããŸãã
èŠãŠã¬ãã¥ãŒããŠãã ãã...
ããã¯ãã¹ãã³ã·ã«ãšã¹ããŒãªãŒããã¯ã䜿çšããŠã¹ã¿ã³ãã¢ãã³Webã³ã³ããŒãã³ããæ§ç¯ããããã®ã¹ã¿ãŒã¿ãŒãããžã§ã¯ãã§ãã
Stencilã¯ãWebã³ã³ããŒãã³ãã䜿çšããŠé«éãªWebã¢ããªãæ§ç¯ããããã®ã³ã³ãã€ã©ã§ãã
ã¹ãã³ã·ã«ã¯ãæã人æ°ã®ããããã³ããšã³ããã¬ãŒã ã¯ãŒã¯ã®æé«ã®æŠå¿µããå®è¡æããŒã«ã§ã¯ãªãã³ã³ãã€ã«æããŒã«ã«çµåããŸãã Stencilã¯ãTypeScriptãJSXãå°ããªä»®æ³DOMã¬ã€ã€ãŒãå¹ççãªäžæ¹åããŒã¿ãã€ã³ãã£ã³ã°ãéåæã¬ã³ããªã³ã°ãã€ãã©ã€ã³ïŒReact Fiberãšåæ§ïŒãããã³é 延èªã¿èŸŒã¿ãããã«å©çšã§ãã100ïŒ æšæºããŒã¹ã®Webã³ã³ããŒãã³ããçæããŸãã Custom Elementsv1ä»æ§ããµããŒããããã©ãŠã¶ã§ã
ã¹ãã³ã·ã«ã³ã³ããŒãã³ãã¯åãªãWebã³ã³ããŒãã³ãã§ãããããäž»èŠãªãã¬ãŒã ã¯ãŒã¯ã§æ©èœãããããã¬ãŒã ã¯ãŒã¯ããŸã£ãããªãç¶æ ã§æ©èœããŸãã
ãªããžããªã®ã¯ããŒã³ãäœæãã
git clone https://github.com/Edd-Strickland/stencilbook.git
ããŒã¹ãã£ã¬ã¯ããªã«ç§»åããŸãã
cd stencilbook
ã¢ãžã¥ãŒã«ãã€ã³ã¹ããŒã«ããŸãã
npm install
ãªããžããªå šäœã®ãã«ããå®è¡ããŸãã
npm run build:all
ãã®å®è¡ã¹ããŒãªãŒããã¯ã®åŸïŒ
npm run storybook
ã¹ãã³ã·ã«ãäœæããïŒ
npm run stencil
ãµãŒã/ãŠã©ããã¢ãŒãã§çŽæ¥ã¹ãã³ã·ã«ãéå§ããŸãã ã¹ãã³ã·ã«ã³ã³ããŒãã³ããçŽæ¥ä¿®æ£ããå Žåã«äŸ¿å©ã§ãã
npm run stencil:start
ãŠã©ããã¢ã³ããµãŒãã䜿çšããŠã¹ããŒãªãŒããã¯ãšã¹ãã³ã·ã«ãã«ããå®è¡ãããã«ããããŠããŒã«ã«ã§æäŸããã以åã®ããŒãžã§ã³ãåé€ããŸãã
npm run storybook:build:all
ã¹ããŒãªãŒããã¯ãããŒã«ã«ã§æäŸããïŒ
npm run storybook:serve
ã¢ãžã¥ãŒã«ããªã»ããããŸãã ããŒãã¢ãžã¥ãŒã«ãåé€ããŠåã€ã³ã¹ããŒã«ããŸãã
npm run reset:modules
ã³ã³ããŒãã³ãã®åäœãã¹ããå®è¡ããã«ã¯ã次ã®ã³ãã³ããå®è¡ããŸãã
npm test
ãŠã©ããã¢ãŒãã§ãã¹ããå®è¡ããã«ã¯ïŒ
npm run test.watch
æ°ããã¹ãã³ã·ã«ã³ã³ããŒãã³ããèªåçã«çæããã«ã¯ïŒ
npm run generate
@ Edd-Stricklandããã¯çŽ æŽãããã¹ã¿ãŒãã§ãïŒ èµ·åãç°¡åã«ããããã«éå§ã¹ã¯ãªãããè¿œå ããããšãææ¡ã§ããã°ã "start": "npm-run-all -p stencil:start storybook"
ãå®è¡ããŸãããããã¯ãã¹ããŒãªãŒããã¯ãã¹ãã³ã·ã«ã®æ§ç¯ãèªèããŠããªãããã«èŠãããããããããªããŒãããªãããšãé€ããŠãããªãããŸãæ©èœããŸãã
...ããã¯ç§ãäœããéããŠããªãéãã§ããïŒ
@shilman @ https ïŒ
ããã¯äžŠè¡ããåãçµã¿ã§ããïŒ ããã§ãªãå Žåã察å¿ããåé¡ãããŸããŸç¥ã£ãŠããŸããïŒ åé¡ã§web-components
ãæ€çŽ¢ãããšãã«èŠã€ãããŸããã§ããã app: web-components
ã¿ã°ãèŠã€ãããŸãããããªãªãŒã¹ã«è¿œå ãããã°ããã§ããã°ããããŸãã
@storybook/web-components
ã«ãã£ãŠæäŸããããã®ã«å ããŠãé©åãªã¹ãã³ã·ã«ãµããŒããè¿œå ããããã«äœãå¿
èŠãããããŸããã ãã®ã¹ã¬ããã®èª°ããç¥ã£ãŠãããšç¢ºä¿¡ããŠããŸãïŒ
@ Edd-Stricklandããã¯çŽ æŽãããã¹ã¿ãŒãã§ãïŒ èµ·åãç°¡åã«ããããã«éå§ã¹ã¯ãªãããè¿œå ããããšãææ¡ã§ããã°ã
"start": "npm-run-all -p stencil:start storybook"
ãå®è¡ããŸãããããã¯ãã¹ããŒãªãŒããã¯ãã¹ãã³ã·ã«ã®æ§ç¯ãèªèããŠããªãããã«èŠãããããããããªããŒãããªãããšãé€ããŠãããªãããŸãæ©èœããŸãã...ããã¯ç§ãäœããéããŠããªãéãã§ããïŒ
ããŒãããè©«ã³ã¯å é±ã®çµããã®äŒè°ã§å¿ããã£ãã§ãã
ç§ã¯ããªããæ±ããŠããåé¡ã«ã€ããŠæ··ä¹±ããŠããŸãã詳现ã«ã€ããŠã¯ããã®ã¹ã¬ããã§ã¯ãªããã¬ãã®åé¡ãä»ããŠãããæèµ·ã§ããŸããã
ãã ããã€ã³ã¹ããŒã«ãå®è¡ããŠããstorybookã³ãã³ããå®è¡ãããšãããã«å¿ããŠç£èŠãµãŒããŒãèµ·åããŸãã ã¹ãã³ã·ã«ã¯ãã³ã³ããŒãã³ãã®å®è¡äžã«ã³ã³ããŒãã³ããå€æŽãè¿œå ããŸãã¯æŽæ°ãããã³ã«HMRãèªååããŸãã
@storybook/web-components
ã«ãã£ãŠæäŸããããã®ã«å ããŠãé©åãªã¹ãã³ã·ã«ãµããŒããè¿œå ããããã«äœãå¿ èŠãããããŸããã ãã®ã¹ã¬ããã®èª°ããç¥ã£ãŠãããšç¢ºä¿¡ããŠããŸãïŒ
äŸåããŸãããWebã³ã³ããŒãã³ãã¯ããã©ã€ã³ã¹ã¿ã³ã¹ã§åäœããŸããããããã®éããæ¯èŒããŠããŸããããã¹ãã³ã·ã«ã¯Webã³ã³ããŒãã³ããåºåããŸãããããã©ã«ãã§ã¯W / Cã§ã¯ãªããW / Cã®ã³ã³ãã€ã©ãšããŠå®è¡ãããŸãã
ãããã£ãŠãééããªãäž¡æ¹ãå¿ èŠã§ãã 1ã€ã®ãã€ãã£ãJSW / Cãšãã¹ããŒãªãŒããã¯ã®æšªã«ããã¹ãã³ã·ã«ããŒã¹ã®W / Cã®ãããã¿ã€ããé«éåãããå Žåã¯ãã¹ãã³ã·ã«ã³ã³ãã€ã©çšã«1ã€ã
@daKmoRã«è¿œãã€ããŠããããéè€ã§ãããåé·ã§ããããè°è«ããæéããããŸããããåœé¢ã¯ãã®ããŒãžã§ã³ãç¶æããŠããŸãã
ç§ã¯æè¿ã«ã€ãŸããBulmilåå ãšã¹ãã³ã·ã«ã®çµ±åäžã®èªåã®ä»äºã«nuxt-ã¹ãã³ã·ã«ãšãã®nuxtäŸã
ç§ã¯ãŸãããŸãšããªã¹ããŒãªãŒããã¯ã®ãµããŒããããããšãç解ããŸããã å€åãããäžèŠã®äŸ¡å€ããããŸãã å éš/ãã®ã¹ã¬ããã®çŸåšã®ç¶æ ãšã®éãã¯ããããŸããããã¹ããŒãªãŒããã¯ãå®è¡ãããšãBulmilå ã§ããã«æ©èœããŸãã
@storybook/addon-actions
ããŸã æ©èœããŠããªãããã§ãããããããæ©èœãããããšãã§ããŸããã§ããã
ãã¶ãããã®ã¹ã¬ããã§@Gomahãå ¥æããŠãã¹ããŒãªãŒããã¯ã®ã¹ãã³ã·ã«ãµããŒããæ¹åããããã®ã³ã©ãã¬ãŒã·ã§ã³ã«é¢ãã圌ã®ã¢ã€ãã¢ãèãããšãã§ããŸããïŒ
æè¿ãç§ã¯ã€ãŸããBulmilåå ãšã¹ãã³ã·ã«ã®çµ±åäžã®èªåã®ä»äºã«nuxt-ã¹ãã³ã·ã«ãšãã®nuxtäŸã
ç§ã¯ãŸãããŸãšããªã¹ããŒãªãŒããã¯ã®ãµããŒããããããšãç解ããŸããã å€åãããäžèŠã®äŸ¡å€ããããŸãã å éš/ãã®ã¹ã¬ããã®çŸåšã®ç¶æ ãšã®éãã¯ããããŸããããã¹ããŒãªãŒããã¯ãå®è¡ãããšãBulmilå ã§ããã«æ©èœããŸãã
@storybook/addon-actions
ããŸã æ©èœããŠããªãããã§ãããããããæ©èœãããããšãã§ããŸããã§ããã
確ãã«ãäžèšã®ãªããžããªå ã§ã¯ãæšæºã®ã¹ããŒãªãŒããã¯ã¢ããªã³ãšããŠãã¢ããªã³ã¢ã¯ã·ã§ã³ãæ©èœããŸã
E2AïŒ @Gomahããªã¢ã³ãã§ã¯ãªãã¹ãã³ã·ã«ããã¯ã
äžèšã®åºæ¬çãªã¹ãã³ã·ã«/ SBçµ±åã®ç®çã¯ãã¹ããŒãªãŒããã¯ãã¹ããŒãªãŒããã¯ã«ãã¹ãã³ã·ã«ãã¹ãã³ã·ã«ã«çµ±åããäž¡æ¹ãçµ±åããŠãã¹ãã³ã·ã«ãä»ããŠäœæãããWebã³ã³ããŒãã³ããã¹ããŒãªãŒããã¯ãã¬ãŒã ã«é 眮ã§ããããã«ããããŒã¹ãäœæããããšã§ããã
W / CããŒãžã§ã³ããã®ã€ãã¬ãŒã·ã§ã³ãšåæ§ã«å®è¡ããããã©ãããããã³äœ¿çšããŠããæ¢åã®ããŒãžã§ã³ãW / CããŒãžã§ã³ã«å€æã§ãããã©ããã確èªããããã«ã次ã®2é±éã¯ããŒã ã®ã¹ããªã³ãã«æ¥äžæããŸããã
çæ³çã«ã¯ãã¹ãŠãæ©èœãããããW / Cããªã¢ã³ãã®æçåã¯ãããŸãããããã€ãã£ãã®W / Cå®è£ ãšã¯ç°ãªããã¹ãã³ã·ã«ã¯å®éã«ã¯ãã¬ãŒã ã¯ãŒã¯ã§ã¯ãããŸããã ã³ã³ãã€ã©ã ãããã£ãŠãåŸã§W / CãšããŠåºåãããJSXã³ã³ããŒãã³ããèšè¿°ã§ããããã«åºå¥ããããšã¯ãŸã 䟡å€ããããããããŸããã
ãŸãã¯ããã¯æ¬åœã«ç°¡åãããããŸããã
ã¹ãã€ã¯ãå®äºããããç¥ããããŸãã
ããŸãã«ã¹ã¿ãã€ãºããŠããŸããã Webpackã«ããã€ãè¿œå ãããŸããã æåã®typescriptã¯
Cannot find name 'h'
ã«ã€ããŠæå¥ãèšããŸãã ç§ã®tsconfigã«ã¯jsx = reactãšjsxFactory = hããããŸãã äžéšã®// <strong i="7">@jsx</strong> h
ãã©ã°ãèšå®ã䜿çšããŠãããã®èŠåãæ¶ãããšãã§ããŸãããDOMããŒããŸãã¯æååãè¿ããªãããã«ã¹ããŒãªãŒããã¯ãšã©ãŒãçºçããŸããè©ŠããŠã¿ãïŒ https ïŒ
ç·šéïŒjsxã§ããŸãæ©èœããŸãã ãããtypescriptã§åäœãããæ¹æ³ãç解ããããšã¯ã§ããŸãããïŒ/
ããã«ã¡ã¯@vidarcã storiesOf()
æ§æã§ãããæ©èœãããããšãã§ããŸãããïŒ ãããããªããç§ã¯ããªãããããã©ã®ããã«ããããèŠãŠæ¬åœã«èå³ããããŸãã å
±æããã³ãŒãäŸãŸãã¯ã³ãŒãããŒã¹ã¯ãããŸããïŒ
ã¹ããŒãªãŒããã¯ãšã¹ãã³ã·ã«ãçµ±åããããããžã§ã¯ãã§ããŸãæ©èœããŠããäžæ¹ã§ãæ倧ã®åé¡ç¹ã¯ããªããžã§ã¯ãã®å°éå
·ãªã©ãåããã³ã³ããŒãã³ãã«å¯ŸããŠdocument.createElement()
ã§ã¹ããŒãªãŒãäœæããããšã«é Œããªããã°ãªããªãããšã§ãã vhtml
解決ã§ããå Žåãããããã¯çŽ æŽãããã§ãããïŒ
@storybook/web-components
ã«ãã£ãŠæäŸããããã®ã«å ããŠãé©åãªã¹ãã³ã·ã«ãµããŒããè¿œå ããããã«äœãå¿ èŠãããããŸããã ãã®ã¹ã¬ããã®èª°ããç¥ã£ãŠãããšç¢ºä¿¡ããŠããŸãïŒ
ããªãã¯æ£ããã§ãããããŠç§ã¯åæããŸãã README.mdã«å«ãŸããŠãããã©ã«ããŒã«æ°ã¥ããä»ã®Webã³ã³ããŒãã³ããã¬ãŒã ã¯ãŒã¯ãèŠãŸããããã¹ãã³ã·ã«ã¯èŠãŸããã§ããã
By default the following folders are included
src/*.js
packages/*/src/*.js
node_modules/lit-html/*.js
node_modules/lit-element/*.js
node_modules/@open-wc/*.js
node_modules/@polymer/*.js
node_modules/@vaadin/*.js
ãã®ãããã¹ãã³ã·ã«ã¯å«ãŸããŠããªããšæããŸããã ãããããããäœãè¿œå ããã«ããŸãæ©èœããå Žåãããã¯ç§ã«ãšã£ãŠã¯ãŸã£ããåé¡ãããŸããã
ãšããã§ãåè¿°ã®Webã³ã³ããŒãã³ãã®ããªã»ããã«ãã£ãŠè§£æ±ºãããããããã®åé¡ã解決ã§ããŸããïŒ
ããŸãã«ã¹ã¿ãã€ãºããŠããŸããã Webpackã«ããã€ãè¿œå ãããŸããã æåã®typescriptã¯
Cannot find name 'h'
ã«ã€ããŠæå¥ãèšããŸãã ç§ã®tsconfigã«ã¯jsx = reactãšjsxFactory = hããããŸãã äžéšã®// <strong i="8">@jsx</strong> h
ãã©ã°ãèšå®ã䜿çšããŠãããã®èŠåãæ¶ãããšãã§ããŸãããDOMããŒããŸãã¯æååãè¿ããªãããã«ã¹ããŒãªãŒããã¯ãšã©ãŒãçºçããŸãã
è©ŠããŠã¿ãïŒ https ïŒ
ç·šéïŒjsxã§ããŸãæ©èœããŸãã ãããtypescriptã§åäœãããæ¹æ³ãç解ããããšã¯ã§ããŸãããïŒ/ããã«ã¡ã¯@vidarcã
storiesOf()
æ§æã§ãããæ©èœãããããšãã§ããŸãããïŒ ãããããªããç§ã¯ããªãããããã©ã®ããã«ããããèŠãŠæ¬åœã«èå³ããããŸãã å ±æããã³ãŒãäŸãŸãã¯ã³ãŒãããŒã¹ã¯ãããŸããïŒã¹ããŒãªãŒããã¯ãšã¹ãã³ã·ã«ãçµ±åããããããžã§ã¯ãã§ããŸãæ©èœããŠããäžæ¹ã§ãæ倧ã®åé¡ç¹ã¯ããªããžã§ã¯ãã®å°éå ·ãªã©ãåããã³ã³ããŒãã³ãã«å¯ŸããŠ
document.createElement()
ã§ã¹ããŒãªãŒãäœæããããšã«é Œããªããã°ãªããªãããšã§ããvhtml
解決ã§ããå Žåãããããã¯çŽ æŽãããã§ãããïŒ
ããããææ°ã®CSFã¹ããŒãªãŒãšããŠçŽæ¥äœæããã¹ããŒãªãŒãé©åã«æ©èœãã圢åŒã«äº€æããããšãã§ããŸãã ãŸããããã€ãã®ããŒã¿ãã¡ã¯ããªãã€ã³ããŒãããŠããŒã¿ãªããžã§ã¯ãã«ããŒã¿ãå ¥åããå Žåã¯ããããã䜿çšããŠå°éå ·ãæ°Žåãããããšãã§ããŸãã
@robaxelsen https://github.com/storybookjs/storybook/pulls?utf8=%E2%9C%93&q=is%3Apr+sort%3Aupdated-desc+is%3Aclosed+label%3A%22app%3A+web-components ïŒ 22 +
@storybook/web-components
ã«ãã£ãŠæäŸããããã®ã«å ããŠãé©åãªã¹ãã³ã·ã«ãµããŒããè¿œå ããããã«äœãå¿ èŠãããããŸããã ãã®ã¹ã¬ããã®èª°ããç¥ã£ãŠãããšç¢ºä¿¡ããŠããŸãïŒããªãã¯æ£ããã§ãããããŠç§ã¯åæããŸãã README.mdã«å«ãŸããŠãããã©ã«ããŒã«æ°ã¥ããä»ã®Webã³ã³ããŒãã³ããã¬ãŒã ã¯ãŒã¯ãèŠãŸããããã¹ãã³ã·ã«ã¯èŠãŸããã§ããã
By default the following folders are included src/*.js packages/*/src/*.js node_modules/lit-html/*.js node_modules/lit-element/*.js node_modules/@open-wc/*.js node_modules/@polymer/*.js node_modules/@vaadin/*.js
ãã®ãããã¹ãã³ã·ã«ã¯å«ãŸããŠããªããšæããŸããã ãããããããäœãè¿œå ããã«ããŸãæ©èœããå Žåãããã¯ç§ã«ãšã£ãŠã¯ãŸã£ããåé¡ãããŸããã
ãšããã§ãåè¿°ã®Webã³ã³ããŒãã³ãã®ããªã»ããã«ãã£ãŠè§£æ±ºãããããããã®åé¡ã解決ã§ããŸããïŒ
ã¹ãã³ã·ã«ã§åäœãããã©ããããã¹ãããå ±åããŠããéããããšãã§ããŸãã ãããå®éã«ã¹ãã³ã·ã«ã§æ©èœããªãå Žåãéããæå³ã¯ãããŸãã...
..ã
ããã«ã¡ã¯@vidarcã
storiesOf()
æ§æã§ãããæ©èœãããããšãã§ããŸãããïŒ ãããããªããç§ã¯ããªãããããã©ã®ããã«ããããèŠãŠæ¬åœã«èå³ããããŸãã å ±æããã³ãŒãäŸãŸãã¯ã³ãŒãããŒã¹ã¯ãããŸããïŒ
ã¹ããŒãªãŒããã¯ãšã¹ãã³ã·ã«ãçµ±åããããããžã§ã¯ãã§ããŸãæ©èœããŠããäžæ¹ã§ãæ倧ã®åé¡ç¹ã¯ããªããžã§ã¯ãã®å°éå ·ãªã©ãåããã³ã³ããŒãã³ãã«å¯ŸããŠdocument.createElement()
ã§ã¹ããŒãªãŒãäœæããããšã«é Œããªããã°ãªããªãããšã§ããvhtml
解決ã§ããå Žåãããããã¯çŽ æŽãããã§ãããïŒããããææ°ã®CSFã¹ããŒãªãŒãšããŠçŽæ¥äœæããã¹ããŒãªãŒãé©åã«æ©èœãã圢åŒã«äº€æããããšãã§ããŸãã ãŸããããã€ãã®ããŒã¿ãã¡ã¯ããªãã€ã³ããŒãããŠããŒã¿ãªããžã§ã¯ãã«ããŒã¿ãå ¥åããå Žåã¯ããããã䜿çšããŠå°éå ·ãæ°Žåãããããšãã§ããŸãã
ããããšãã CSFãä»ã§ã¯ç©èªãæžãããã®æšå¥šãããæ¹æ³ã§ããããšã«æ°ã¥ããŠããŸããã§ããã jsxã¢ããªã³ãvhtmlbtwã§åäœãããããšãã§ããŸãããããããšãäžå¯èœã§ããïŒ
..ã
ããã«ã¡ã¯@vidarcã
storiesOf()
æ§æã§ãããæ©èœãããããšãã§ããŸãããïŒ ãããããªããç§ã¯ããªãããããã©ã®ããã«ããããèŠãŠæ¬åœã«èå³ããããŸãã å ±æããã³ãŒãäŸãŸãã¯ã³ãŒãããŒã¹ã¯ãããŸããïŒ
ã¹ããŒãªãŒããã¯ãšã¹ãã³ã·ã«ãçµ±åããããããžã§ã¯ãã§ããŸãæ©èœããŠããäžæ¹ã§ãæ倧ã®åé¡ç¹ã¯ããªããžã§ã¯ãã®å°éå ·ãªã©ãåããã³ã³ããŒãã³ãã«å¯ŸããŠdocument.createElement()
ã§ã¹ããŒãªãŒãäœæããããšã«é Œããªããã°ãªããªãããšã§ããvhtml
解決ã§ããå Žåãããããã¯çŽ æŽãããã§ãããïŒããããææ°ã®CSFã¹ããŒãªãŒãšããŠçŽæ¥äœæããã¹ããŒãªãŒãé©åã«æ©èœãã圢åŒã«äº€æããããšãã§ããŸãã ãŸããããã€ãã®ããŒã¿ãã¡ã¯ããªãã€ã³ããŒãããŠããŒã¿ãªããžã§ã¯ãã«ããŒã¿ãå ¥åããå Žåã¯ããããã䜿çšããŠå°éå ·ãæ°Žåãããããšãã§ããŸãã
ããããšãã CSFãä»ã§ã¯ç©èªãæžãããã®æšå¥šãããæ¹æ³ã§ããããšã«æ°ã¥ããŠããŸããã§ããã jsxã¢ããªã³ãvhtmlbtwã§åäœãããããšãã§ããŸãããããããšãäžå¯èœã§ããïŒ
ãã®ãããJSXã¯ã¹ãã³ã·ã«ã³ã³ãã€ã©ãä»ããŠShadowdomã«çŽæ¥è§£æãããŸãã ãããã£ãŠãã³ã³ãã€ã©ãŒã®ã¹ããŒãªãŒããã¯ãžã®çµ±åã䜿çšããŠããéããæšæºã®ã¹ãã³ã·ã«ã³ã³ããŒãã³ããäœæãããããCSFã¹ããŒãªãŒã«å«ããŠãããããŒã¿ãã¡ã¯ããªã«ã€ã³ããŒãããŠå°éå ·ã«ããŒã¿ãå ¥åããŸãã
ç§ãæçš¿ããããã©ãªããžããªã¯ããããç®±ããåºããŠããã«å®è¡ã§ããŸããVHTMLãã©ã°ã€ã³ã¯å¿ èŠãããŸããããŸããã¹ãã³ã·ã«ãšããŠçŽæ¥èšè¿°ããŠåºåããã ãã®ã©ãããŒãå¿ èŠãããŸããã
storyOfæ§æã䜿çšã§ããŸããããã®å ŽåãåŸæ¥ã®document.createElementãã¿ãŒã³ã«åºå®ãããŸãã
ããšãã°ãã¢ã€ã³ã³ã®ãã®å€ãstoriesOfæ§æ
import { storiesOf } from '@storybook/html';
/**
* Import readme from component into the story
*/
import markdown from './readme.md';
storiesOf('1-Atoms/icon', module)
.addParameters({ viewport: { defaultViewport: 'responsive' } })
.add('knobs', () => {
/**
* Add Knobs to component panel
* Set within Each knob as the third parameter
*/
let icon = document.createElement('namespace-icon');
icon.classList.add('namespace-action-plan');
icon.size = 'medium';
return icon;
}, { notes: { markdown } });
VS
import centered from '@storybook/addon-centered/html';
import markdown from './readme.md';
export default {
title: 'Atoms|Icon',
decorators: [centered],
parameters: {
notes: { markdown },
viewport: { defaultViewport: 'responsive' }
}
};
export const knobs = (): HTMLNamespaceIconElement => {
const icon: HTMLYooIconElement = document.createElement('namespace-icon');
icon.classList.add('namespace-action-plan');
icon.size = 'medium';
return icon;
};
ããŸãã«ã¹ã¿ãã€ãºããŠããŸããã Webpackã«ããã€ãè¿œå ãããŸããã æåã®typescriptã¯
Cannot find name 'h'
ã«ã€ããŠæå¥ãèšããŸãã ç§ã®tsconfigã«ã¯jsx = reactãšjsxFactory = hããããŸãã äžéšã®// <strong i="8">@jsx</strong> h
ãã©ã°ãèšå®ã䜿çšããŠãããã®èŠåãæ¶ãããšãã§ããŸãããDOMããŒããŸãã¯æååãè¿ããªãããã«ã¹ããŒãªãŒããã¯ãšã©ãŒãçºçããŸãã
è©ŠããŠã¿ãïŒ https ïŒ
ç·šéïŒjsxã§ããŸãæ©èœããŸãã ãããtypescriptã§åäœãããæ¹æ³ãç解ããããšã¯ã§ããŸãããïŒ/ããã«ã¡ã¯@vidarcã
storiesOf()
æ§æã§ãããæ©èœãããããšãã§ããŸãããïŒ ãããããªããç§ã¯ããªãããããã©ã®ããã«ããããèŠãŠæ¬åœã«èå³ããããŸãã å ±æããã³ãŒãäŸãŸãã¯ã³ãŒãããŒã¹ã¯ãããŸããïŒã¹ããŒãªãŒããã¯ãšã¹ãã³ã·ã«ãçµ±åããããããžã§ã¯ãã§ããŸãæ©èœããŠããäžæ¹ã§ãæ倧ã®åé¡ç¹ã¯ããªããžã§ã¯ãã®å°éå ·ãªã©ãåããã³ã³ããŒãã³ãã«å¯ŸããŠ
document.createElement()
ã§ã¹ããŒãªãŒãäœæããããšã«é Œããªããã°ãªããªãããšã§ããvhtml
解決ã§ããå Žåãããããã¯çŽ æŽãããã§ãããïŒ
@robaxelsen
@ storybook / reactã䜿çšããwebpackæ§æãå€æŽããŠãMDXãã¡ã€ã«ãšãšãã«MDãã¡ã€ã«ãå€æããããšã«ãªããŸããã 次ã«ãjsondocåºåã¹ãã³ã·ã«ãæäŸããããã«åºã¥ããŠãããäœæããããã®ã»ãã®å°ãã®ã³ãŒãã ã¹ãã³ã·ã«ã³ãŒãã«ã€ããŠã¯ãCLIããã®ã¹ããŒãªãŒããã¯ã®ã³ããŒã䜿çšãããããã®ãã¡ã€ã«ãpreview-head.htmlãã¡ã€ã«ã«ãªã³ã¯ããŸãã ç§ã®ç®çã«ããªãããåããŸãã
@ Edd-StricklandäŸãšèª¬æãããããšãã æåŸã®äŸã§ã¯ãèŠçŽ ã®å°éå ·ãšããŠãããã°ã©ã ã§å±æ§ãæž¡ãå¿ èŠããããŸãã ç§ã®æã¿ã¯ãvhtmlãŸãã¯ãã¬ãŒã³ã¹ãã³ã·ã«ã³ã³ãã€ã©ã®ããããã䜿çšããŠãJSXãšããŠã¹ããŒãªãŒãèšè¿°ã§ããããšã§ããã
ãããã£ãŠã代ããã«ïŒ
export const knobs = (): HTMLNamespaceIconElement => {
const icon: HTMLYooIconElement = document.createElement('namespace-icon');
icon.classList.add('namespace-action-plan');
icon.size = 'medium';
return icon;
};
...ç§ã¯æžãã ããïŒ
export const knobs = (): HTMLNamespaceIconElement => {
return (
<namespace-icon class="namespace-action-plan" size="medium">
</namespace-icon>
);
};
èªã¿ããããšã¹ããŒãªãŒã®äœæã®ããããã®äž¡æ¹ã ããã§ã¯ãããã¯äžå¯èœã§ããïŒ å¯èœã§ããã°ãç°¡åãªäŸãæããŠããã ããŸããïŒ
ç°¡åã§ããã°ãäžåãã£ããã§è©±ãããšãã§ããŸãã ç§ã¯Rob Axelsen#1373
ã§ãã
ç·šéïŒäžèšã«è¿œå ããããã«ãCSFã®ããã¥ã¡ã³ãã確èªããJSXæ§æã§h
ã€ã³ããŒãããŠã¿ãŸãããããã¹ããŒãªãŒããHTMLã¹ãããããŸãã¯DOMããŒããå¿
èŠã§ãïŒãã·ã³ãã«ã¹ããŒãªãŒãããšãããšã©ãŒãã¹ããŒãããŸãã ãã³ã³ããŒãã³ããã®ããïŒ
export const simpleStory = () => <namespace-icon class="namespace-action-plan" size="medium"></name-spaceicon>;
ãããWebã³ã³ããŒãã³ãã®ããããã£ãèšå®ããå¿
èŠãããã¹ããŒãªãŒã®äœæã«é¢ãããã®ã§ããå Žåã¯ã @storybook/web-components
ã lit-htmlã䜿çšhtmlã宣èšçã«äœæããŠããŸãã
ããã¯ãã¹ããŒãªãŒããã¯ãšã¹ãã³ã·ã«ã䞊ã¹ãŠå®è¡ãããšãã«æ©èœããã¯ãã§ã:)
ã¹ãã³ã·ã«ãlithtmlã䜿çšããªãããšãé€ããŠã ããã¯Vueã®ããšã§ã...
@shilman @ https ïŒ
ããã«ãªã³ã¯ãããŠãããªããžããªã«ã¯ããŒã³ã¢ã¯ã·ã§ã³ãªã©ããªãWebã³ã³ããŒãã³ãããã±ãŒãžãããŠã³ããŒãããŠãã¹ãããã«ã¯ã©ãããã°ããã§ããïŒ
@ Edd-ã¡ã€ã³ã¹ããŒãªãŒããã¯monorepoã®åãªããã£ã¬ã¯ããªã§ããStrickland
ã¹ãã³ã·ã«ãlithtmlã䜿çšããªãããšãé€ããŠã ããã¯Vueã®ããšã§ã...
ããã¯lit thing
ã§ãð€
ãã ãããããWebã³ã³ããŒãã³ãã®çŸããã§ããå éšã§ã¹ãã³ã·ã«ãäœã䜿çšãããã¯åé¡ã§ã¯ãããŸããã lit-htmlãŸãã¯ãã®ä»ã®æ¹æ³ã§ã¹ããŒãªãŒãå®çŸ©ã§ããŸãã ããããå¿ èŠãªã®ã¯ãããããã£ã䜿çšããŠãhtmlããèšè¿°ããæ¹æ³ã ãã§ãã
lit-htmlã®å Žåã次ã®ããã«ãªããŸã
export myStory = () => {
const dataArray = [{ name: 'john', age: 21 }, { name: 'maria', age: 28 }];
return html`
<my-lit-component .title=${'some title'} power="unlimited">
<p> some light dom</p>
</my-lit-component>
<my-stencil-component super-mode .data=${dataArray}></my-stencil-component>
`;
}
ãããã£ãŠãã¹ããŒãªãŒã§Chromeã®DevToolsã«ã¢ã¯ã»ã¹ããå Žåã¯ãlit-componentãéžæãããšã次ã®è©³çŽ°ãèªãããšãã§ããŸãã
ã¹ãã³ã·ã«ã³ã³ããŒãã³ãã®å Žåã¯ãåããã«ãªããŸã
lit-htmlã¯domãã¬ã³ããªã³ã°ããã ãã§ã... domèŠçŽ ãç»é²ãããŠããå Žæ/æ¹æ³lit-htmlã¯ç¥ããªã/æ°ã«ããŸãã-ãããã£ãŠãåã³ã³ããŒãã³ãã«äœ¿çšããããã¯ãããžãŒã¯å®å šã«ç°ãªãå¯èœæ§ããããŸã...ããšãã°ãã³ã³ããŒãã³ãã誰ã«ããããšãã§ããŸãlit-elementãstencilãvanilla HTMLElementã§ããããå®å šãªreact / vue / angularã¢ããªã±ãŒã·ã§ã³ã®Webã³ã³ããŒãã³ãã©ãããŒã§ããå¯èœæ§ããããŸã...ð±
ã¹ãã³ã·ã«ã¯ã³ã³ãã€ã©ãŒãããããŸããããWebã³ã³ããŒãã³ãã«ã³ã³ãã€ã«ããããšãåãªãdomãšããŠäœ¿çšã§ããŸãð€
PSïŒ @storybook/web-components
ã¯lit-htmlã䜿çšããŸã
StencilããŒã ã¯ã³ã³ãã€ã©ãŒããªãã¡ã¯ã¿ãªã³ã°ããŠãããããã«ããStencil / Storybookã®çµ±åãå€ãããšæããŸãã
誰ããReactãã§ãã¯ã¢ãŠãhttps://github.com/the-road-to-learn-react/use-custom-elementãä»ããŠã¹ãã³ã·ã«ãšã¹ããŒãªãŒããã¯ã䜿çšããå Žåã¯ãé åãšãªããžã§ã¯ããæž¡ãããšãã§ããŸãã åŸã§èªåã§è©ŠããŠã¿ãŸãããããã¯äžéšã®äººã«åœ¹ç«ã€å¯èœæ§ããããŸãã
èå³ã®ããæ¹ã®ããã«ãStorybook / reactãšStencilãçµã¿åãããããã®ã¹ã¿ãŒã¿ãŒãå ¬éããŸããïŒ https ïŒ
Storybookã¯Webã³ã³ããŒãã³ãçšã®StorybookãéçºããŠããããã§ãã ã¹ãã³ã·ã«ã§è©ŠããŠã¿ãŸããããããªãããŸãæ©èœããŠããŸãã
https://github.com/storybookjs/storybook/tree/next/app/web-components
@ sem4phorèšå®ãå ±æã§ããŸããïŒ
Webã³ã³ããŒãã³ãã®æ°ããã¹ããŒãªãŒããã¯ã®ã€ã³ã¹ããŒã«ã§lit-htmlã«é¢ãããšã©ãŒãçºçããŸã
ERROR in ./node_modules/@storybook/web-components/dist/client/preview/render.js
Module not found: Error: Can't resolve 'lit-html' in '/Users/david/www/stencil-starter/node_modules/@storybook/web-components/dist/client/preview'
@ ./node_modules/@storybook/web-components/dist/client/preview/render.js 20:15-34
@ ./node_modules/@storybook/web-components/dist/client/preview/index.js
@ ./node_modules/@storybook/web-components/dist/client/index.js
@ ./.storybook/preview.js
@ multi ./node_modules/@storybook/core/dist/server/common/polyfills.js ./node_modules/@storybook/core/dist/server/preview/globals.js ./.storybook/preview.js ./.storybook/generated-entry.js (webpack)-hot-middleware/client.js?reload=true&quiet=true
@dmartinjsã¯ãããã©ã«ãã®äŸã§ã³ã³ããŒãã³ããã¬ã³ããªã³ã°ããããã«äœ¿çšãããŠãããlit-htmlããèªåã§ã€ã³ã¹ããŒã«ããå¿ èŠããããŸãã
@ Edd-Strickland Webã³ã³ããŒãã³ãçšã®ã¹ããŒãªãŒããã¯ãè¿œå ããŸããã6.0.0ã§ã¯ãããªããŒçšã®ã¹ããŒãªãŒããã¯ã¯éæšå¥š/æŽæ°ãããªããªããŸãã
Webã³ã³ããŒãã³ãã®ã¹ããŒãªãŒããã¯ãã¹ãã³ã·ã«ã³ã³ããŒãã³ãã§æ©èœãããããã«å¿ èŠãªããšã¯ãããŸããïŒ
Webã³ã³ããŒãã³ãã¹ããŒãªãŒããã¯ã¯ã¹ãã³ã·ã«Webã³ã³ããŒãã³ãã³ã³ããŒãã³ããã¬ã³ããªã³ã°ã§ããŸãããã¹ãã³ã·ã«ã¯ãã©ãŠã¶ã§ãã®ãŸãŸå®è¡ããããšã¯ã§ãããã³ã³ãã€ã«ããå¿ èŠããããŸãã ãããã£ãŠãã¹ããŒãªãŒããã¯ãå®è¡ããåã«ã¹ãã³ã·ã«ã³ã³ããŒãã³ããã³ã³ãã€ã«ããªãéããç¹å¥ãªåŠçãå¿ èŠã§ãã
@LarsDenBakkerã¯ãäžèšãæ©èœãããããã«webpackãã©ã°ã€ã³/ããŒããŒãè¿œå ããããšã§ãã ïŒã¹ãã³ã·ã«ã³ã³ããŒãã³ããHMRã«ããŠåçã«ã³ã³ãã€ã«ããããšãæãŸãããšæããŸãïŒ
ã¯ããã¹ãã³ã·ã«èªäœã¯ããŒã«ã¢ããã䜿çšããŸããã ã³ã³ãã€ã«ã¹ããããå¥ã®ãããžã§ã¯ããšããŠäœ¿çšã§ããå Žåã¯ããããããããwebpackãã©ã°ã€ã³ã«ããããšãã§ããŸãã ãã®ããã®å éšã«ã€ããŠã¯ååã«ç¥ããŸããã
ã¹ãã³ã·ã«ã¯Webpackã䜿çšããŸããã 代ããã«ããŒã«ã¢ããã䜿çšããŸãã
ç§ãèšå®ãããªããžããªã䜿çšããŠãããã«å¿ããŠæ©èœãã-watchåŒã³åºãã䜿çšããŠã¹ãã³ã·ã«ã§åçã®HMRãæå¹ã«ããããšãã§ããŸãã ãã®ãããã¹ãã³ã·ã«ãæŽæ°ããããšãã«ã¹ãã³ã·ã«ããªããŒããããæŽæ°ããããšãã«ã¹ããŒãªãŒããã¯ããªããŒããããŸãã
ãããã£ãŠãããã§ã«ããŒããããããæ¯åæ§ç¯ããå¿ èŠã¯ãããŸããã
æè¿ããªããžããªãææ°ã®SBãŸãã¯ã¹ãã³ã·ã«ã§æŽæ°ããæéããããŸããã§ãããããã®ããã»ã¹ã¯åŒãç¶ãæ©èœãããªããžããªãææ°ããŒãžã§ã³ã«ã¢ããã°ã¬ãŒãã§ããŸãã
ããããšã
@ Edd-Strickland Webã³ã³ããŒãã³ãçšã®ã¹ããŒãªãŒããã¯ãè¿œå ããŸããã6.0.0ã§ã¯ãããªããŒçšã®ã¹ããŒãªãŒããã¯ã¯éæšå¥š/æŽæ°ãããªããªããŸãã
Webã³ã³ããŒãã³ãã®ã¹ããŒãªãŒããã¯ãã¹ãã³ã·ã«ã³ã³ããŒãã³ãã§æ©èœãããããã«å¿ èŠãªããšã¯ãããŸããïŒ
ã¯ããããã§ãã©ã€ããªããŒã/ HMRã¯å®éã«ã¯èæ ®ãããŠããŸãããäžèšã§è©³ãã説æããããã«ãwebpackã®äœ¿çšãšããŒã«ã¢ããã®äœ¿çšã®éãããããããçŸæç¹ã§SB WCããŒãžã§ã³ã䜿çšããå Žåã¯ãã¬ã³ããªã³ã°ããããã«ã¹ãã³ã·ã«ã®ãã«ãã«ããå¿ èŠã§ãããã®åŸãHMRã®ãã¹ãŠã®è¯ããã¹ãã³ã·ã«ã«å€±ãããŸãã
ãã®ããŒãžã§ã³ã¯çŸåšãããªããŒããŒãžã§ã³ã§ã¯ãªãHTMLããŒãžã§ã³ã«åºã¥ããŠããããããã®ããŒãžã§ã³ãå»æ¢ãããšããé·æçãªç®æšã«åœ±é¿ãäžããããšã¯ãããŸããã
@LarsDenBakkerã¯ãäžèšãæ©èœãããããã«webpackãã©ã°ã€ã³/ããŒããŒãè¿œå ããããšã§ãã ïŒã¹ãã³ã·ã«ã³ã³ããŒãã³ããHMRã«ããŠåçã«ã³ã³ãã€ã«ããããšãæãŸãããšæããŸãïŒ
ç§ã¯ããããå§ãããŸãããStencilã®webpackããŒãžã§ã³ã¯éåžžã«é£ããéçºãã¹ã§ãããå¿ èŠãªãã«äŸåé¢ä¿ã®ãããããªã³ããå¢ãããŸããç§ãäœæãããªããžããªã«ç€ºãããŠããããã«ããã¹ãŠã§ã©ã€ãã§åã³ã³ãã€ã«ãããã»ãšãã©ã®æèšã§ã¹ãã³ã·ã«ãå®è¡ããããšã¯å®å šã«å¯èœã§ãWCãŸãã¯SBã€ã³ã¹ã¿ã³ã¹ã®å€æŽã äž¡æ¹ãèš±å¯ããããã«æ§æããããšã§ãã
ã¯ããã¹ãã³ã·ã«èªäœã¯ããŒã«ã¢ããã䜿çšããŸããã ã³ã³ãã€ã«ã¹ããããå¥ã®ãããžã§ã¯ããšããŠäœ¿çšã§ããå Žåã¯ããããããããwebpackãã©ã°ã€ã³ã«ããããšãã§ããŸãã ãã®ããã®å éšã«ã€ããŠã¯ååã«ç¥ããŸããã
ãã§ã«ã¹ãã³ã·ã«WPãã©ã°ã€ã³ããããŸãããããã¯ãµããŒããããŠããªãããã³ãã¥ããã£ã§æ¿èªãããäŸåé¢ä¿ã§ã¯ãããŸããã
cc @ jthoms1 @adamdbradley
@dmartinjsã¯ãããã©ã«ãã®äŸã§ã³ã³ããŒãã³ããã¬ã³ããªã³ã°ããããã«äœ¿çšãããŠãããlit-htmlããèªåã§ã€ã³ã¹ããŒã«ããå¿ èŠããããŸãã
@ sem4phorèšå®ãå ±æã§ããŸããïŒ
Webã³ã³ããŒãã³ãã®æ°ããã¹ããŒãªãŒããã¯ã®ã€ã³ã¹ããŒã«ã§lit-htmlã«é¢ãããšã©ãŒãçºçããŸã
ERROR in ./node_modules/@storybook/web-components/dist/client/preview/render.js Module not found: Error: Can't resolve 'lit-html' in '/Users/david/www/stencil-starter/node_modules/@storybook/web-components/dist/client/preview' @ ./node_modules/@storybook/web-components/dist/client/preview/render.js 20:15-34 @ ./node_modules/@storybook/web-components/dist/client/preview/index.js @ ./node_modules/@storybook/web-components/dist/client/index.js @ ./.storybook/preview.js @ multi ./node_modules/@storybook/core/dist/server/common/polyfills.js ./node_modules/@storybook/core/dist/server/preview/globals.js ./.storybook/preview.js ./.storybook/generated-entry.js (webpack)-hot-middleware/client.js?reload=true&quiet=true
ããã«é¢ãããã£ãŒãããã¯ã¯ãããŸããïŒ ãã®äŸåé¢ä¿ãèªåã§ã€ã³ã¹ããŒã«ããå¿ èŠããããŸãã @ storybook / web-componentsã§äœ¿çšãããŠããå Žåã¯ãäŸåé¢ä¿ãšããŠèªåçã«ã€ã³ã¹ããŒã«ãããå¿ èŠããããŸã...ïŒ
@LeeBurtonã¯ããã¢ã®äŸåé¢ä¿ã§ã¯ãããŸãããïŒ ïŒããã§ãããã©ããã¯ããããŸããããããã§ãªãå Žåã¯ããããããããã¹ãã§ãïŒcc
ç§ããã¹ãããŠãããšãã®@ LeeBurtonlit -htmlã¯ãã¢ã®äŸåé¢ä¿ã§ããã ãã¢ã®äŸåé¢ä¿ãèªåã§ã€ã³ã¹ããŒã«ããå¿ èŠãããã®ã¯éåžžã®ããšã§ãã https://nodejs.org/es/blog/npm/peer-dependencies/
䟡å€ãããã®ã§ã .storybook/preview.js
ã§ãã®æ§æã䜿çšããŠã¹ãã³ã·ã«ãååŸããŸãã
import { defineCustomElements } from "../dist/esm/loader.mjs"
defineCustomElements()
configure(require.context('../src', true, /.*\.stories\.(js|mdx)$/), module);
@idmynè©ŠããŠã¿ãŸããããã³ã³ãã€ã«äžã«srcãã¡ã€ã«ã«å ããããå€æŽã¯ãæåã§ããŒããªããŒãããªããšãã©ãŠã¶ã«èªã¿èŸŒãŸããŸããã
npm-run-all
ããã±ãŒãžãšäžŠè¡ããŠstart-storybook
ãå®è¡ããªããã1ã€ã®npmå®è¡ã¹ã¯ãªããã§ãŠã©ãããæå¹ã«ããŠStencilã®ãã«ããããŒã«ã«ã§å®è¡ããããšã§åäœãããŸããã
main.jsã§ä»¥äžã䜿çšããŠãStencilã®distãã¡ã€ã«ãç£èŠããããã«storybookã®webpackæ§æãæ§æããŸããã
const path = require('path');
const glob = require('glob');
module.exports = {
webpackFinal: (config) => {
// watch all revelant files in dist folder
const distDir = path.resolve(__dirname, '../dist');
const files = glob.sync(`${distDir}/**/*.entry.js`, { absolute: true, ignore: ['**/*.system.entry.js'] });
config.entry.push(...files);
return config;
},
};
ãããžã§ã¯ãã®ãã¹/ãã¡ã€ã«ãå°ãå€æŽããå¿ èŠããããããããŸããããããã¯ç§ã«ãšã£ãŠã¯ããŸããããŸããã
@DesignByOnyxãŸãã¯@ Edd-Stricklandã¯ããœãªã¥ãŒã·ã§ã³ã6ã®ããªã»ããã«å€æããããšãæ€èšããããšããããŸããïŒ ç§ã¯ã¬ããš-éåžžã®æ¹æ³ã®äž¡æ¹ã䜿çšããŸãã-ç§ã¯ããããã®ãããã奜ãã§ã:-)
@ Edd-Stricklandã®ã³ããŒã6.0.0-betaã«ããªãããŸã移åããŸããããå€æŽãèŠã€ãããšãã«ãã¹ãŠãåæ§ç¯ããããšã¯éããŸããïŒäŸïŒreadme.mdïŒã
ããã¯@paulfeltonã§å ¬éãããŠããŸããïŒ
ä»ã§ããããªãèªèº«ãå©ããŠãã ãã:-)
Eddã®ãããžã§ã¯ãããã©ãŒã¯ããŸããã @ Edd-StricklandãPRãå ¥ããŸããããã ããã¯è¯ãã¬ãã¥ãŒãå¿ èŠã§ããç§ã¯ããã®å°é家ã§ã¯ãããŸããã
ããã±ãŒãžããã³ãããæ§æãæ°ãã圢åŒã«ãªãã¡ã¯ã¿ãªã³ã°ããŸããã ã¹ãã³ã·ã«readmeãã€ã³ããŒãããã¹ããŒãªãŒãååŸããã«ã¯ãã¿ã€ãã³ã°ãè¿œå ããŠtsconfigã§åç §ãããnotesãããdocsãã«å€æããæ§æãè¿œå ããå¿ èŠããããŸããã
ãŠã£ãã·ã¥ãªã¹ãïŒ
@paulfeltonç§ããäœãå¿ èŠã§ããïŒ
@ndelangenããããŸããã ãåç¥ãããããŸããããç§ã¯ã¹ãã³ã·ã«ãšã¹ããŒãªãŒããã¯ã®äž¡æ¹ã«ããªãæ £ããŠããªãã®ã§ãããŸããŸãªåé¡ã®ãã£ã¹ã«ãã·ã§ã³ãã°ãŒã°ã«ãªã©ãããã©ãã°ã§ãããã®ãäžç·ã«ãããããŸãããŸããã
ç§ãã¹ã¿ãŒã¿ãŒã¬ããžããªã«åå ããŸãããéåžžã«åºæ¿ãåããŸãããããã®åé¡ã§ã®ãã¹ãŠã®å€å€§ãªåªåã«æè¬ããŸãïŒãã¹ãŠã«æè¬ããŸãïŒïŒã
https://github.com/elwynelwyn/stencilbook-ding
@storybook/web-components
ã䜿çšããEssentialsã¢ããªã³ïŒã³ã³ãããŒã«ãã¢ã¯ã·ã§ã³ãªã©ïŒãæäœããŸãã ãã®æ®µéã§ã®ãã¹ãŠã®ææ°ããŒãžã§ã³ã
StenciléçºãµãŒããŒãšStorybookãã¬ãã¥ãŒãã¬ãŒã ã®éã®ããã€ãã®è¿œå ã®çµ±åïŒãããã£ãŠãStencilãšã©ãŒãªãŒããŒã¬ã€ã¯Storybookã«ã€ã³ã©ã€ã³ã§è¡šç€ºãããŸã-ããè¯ãDXïŒïŒïŒdeetsã«ã€ããŠã¯./storybook/preview-body.html
ãš./src/index.html
ã確èªããŠãã ããïŒã
ãStencildevserverãstart-storybook
ããã·ã¥ããã®ã§ã1ã€ã®ã³ãã³ããå®è¡ããã ãã§ãèå°è£ã§ã¹ãã³ã·ã«ãã¹ãã³ã¢ããããŸããã
ç·šéïŒãããconcurrently
+ wait-on
ç°¡ç¥åããŸãã-ã¹ãã³ã·ã«ãã¹ãã³ã¢ããããã®ãåŸ
ã£ãŠãããã¹ããŒãªãŒããã¯ã«é²ã¿ãŸã
ã³ãŒããïŒã¹ãã³ã·ã«ã³ã³ããŒãã³ããŸãã¯ã¹ããŒãªãŒããã¯ã¹ããŒãªãŒã«ïŒå€æŽãããšããã¬ãã¥ãŒãã¬ãŒã ããªããŒããããŸãïŒã¹ããŒãªãŒããã¯ã¢ããªå šäœã§ã¯ãããŸããïŒã ããã¯é©åãªHMRã§ã¯ãããŸããããéçºããã®ã¯ããªãè¯ãããšã§ãã
è¯ãã ãªã³ã¯ãæ©èœããŸããã
ãã£ãšããªããžããªã¯çŸåšå ¬éãããŠããŸã^
ã¹ãã³ã·ã«v2ãš@storybook / web-components v6ã䜿çšããŠãã€ã©ãŒãã¬ãŒããªããžããªãããã«ãŸãšããŸããïŒ https ïŒ
https://github.com/miriamgonp/stencil-web-components-boilerplateã«ã¯ãStorybook / Stencilã®äžåãã£ã³ãã«ãã@miriamgonpã«ãã£ãŠ
ãããã®2ã€ã®ãªããžããªã¯èŠæ ããããŸãã ãããã1ã€ã«çµ±åãããå Žåã¯è¯ãè¿œå ã«ãªããŸãã ãããŠã誰ãããããã®2ã€ã®ãªããžããªã«åºã¥ããŠã Intro to Storybookã®ãã¥ãŒããªã¢ã«ã§è²¢ç®ããŠããããªããç§ãã¡ã¯æ¬åœã«æè¬ããŸãã 誰ããç§ãã¡ãå©ããŠããããã©ããæããŠãã ãããç§ã¯åãã§ã¹ãã³ã·ã«ã䜿çšããã³ãã¥ããã£ã®ã¡ã³ããŒãå©ãã«è¡ããŸãã
ç§ã¯é©åãªhmrãœãªã¥ãŒã·ã§ã³ãæã«å ¥ããŸãã;ïŒããããã§ãïŒ
ç§ã¯é©åãªhmrãœãªã¥ãŒã·ã§ã³ãæã«å ¥ããŸãã;ïŒããããã§ãïŒ
ããã«ãããŸãïŒ
Stencil 2 +ïŒStorybook 6+ïŒå€ãã¹ãã³ã·ã«ããŒãžã§ã³ãæ©èœããã¯ãã§ã;ïŒïŒ
https://github.com/dutscher/stencil-storybook
楜ããã§ä¹Ÿæ¯
ç·šéïŒgh-pagesã®ã¹ããŒãªãŒããã¯ä»ãhttps://dutscher.github.io/stencil-storybook/index.html
å é±ããããç§ãã¡ã®ãããžã§ã¯ãã«äº€æããç§ãã¡ã«é¢ä¿ã®ãªããããïŒBootstrapãscssãã¯ããããã¯ãªã©ïŒãåãé€ããããã€ãã®ãã€ããŒãªãã®ïŒããšãã°ã@ã«ããããã«ã€ã³ããŒãããããã¹ãŠã®å Žæã§package.jsonåãæ©èœããªãïŒãä¿®æ£ããåŸmyorg / my-proj圢åŒïŒããã¯æ¬åœã«ããŸãæ©èœããŠããŸãã
1æ¥ã»ã©äœ¿çšããŠããŠãHMRã¯çŽ æŽãããã§ãïŒ
@elwynelwynã¹ããŒãªãŒããã¯åŽã§ç§ãã¡ãããªããã°ãªããªãããšã¯äœã ãšæããŸããïŒ
@ndelangenéèŠãªããšã¯æ¬¡ã®ãšããã§ãã
也æ¯
æãåèã«ãªãã³ã¡ã³ã
ç§ã¯éå»2é±éãStencilJSãšStorybookã§éãã§ãèªåã®ãœãªã¥ãŒã·ã§ã³ãã«ããŒããã©ã€ãã¹ããªãŒã ãè¡ããŸããã ãã£ãšè¯ãæ¹æ³ããããšæããŸãããHMRãå ¥æããããšãã§ããã»ãšãã©ã®ãã©ã°ã€ã³ã¯ã»ãšãã©åé¡ãªãåäœããŸããã ãã£ã¹ããªãã¥ãŒã·ã§ã³ã¹ãã³ã·ã«ãã³ãã«ããããŒããŒãæ¹åãŸãã¯ã€ã³ããŒãããæ¹æ³ã«ã€ããŠããã£ãŒãããã¯ããå¯ããã ããã
https://www.youtube.com/watch?v=XwHtPw3izLE
ãããŠããããã¬ãã§ãïŒ ^ _ ^
https://github.com/MadnessLabs/enjin-components