vue-webpack-typescript
vue-webpack-typescript copied to clipboard
feature suggestion: add storybook
These work, for Vue + Typescript + Webpack:
- ./.storybook/config.js:
import { configure } from '@storybook/vue'
// automatically import all files ending in *.stories.js
const req = require.context('../src/stories', true, /.stories.ts$/);
function loadStories() {
req.keys().forEach((filename) => req(filename));
}
configure(loadStories, module)
- ./.storybook/webpack.conf.js:
const ForkTsCheckerWebpackPlugin = require('fork-ts-checker-webpack-plugin');
const genDefaultConfig = require('@storybook/vue/dist/server/config/defaults/webpack.config.js');
module.exports = (storybookBaseConfig, configType) => {
const config = genDefaultConfig(storybookBaseConfig, configType);
config.resolve.extensions.push('.ts', '.tsx', '.vue', '.css', '.less', '.scss', '.sass', '.html')
config.module.rules.push({
test: /\.ts$/,
exclude: /node_modules/,
use: [
{
loader: 'ts-loader',
options: {
appendTsSuffixTo: [/\.vue$/],
transpileOnly: true // used with ForkTsCheckerWebpackPlugin
},
}
],
})
config.plugins.push(new ForkTsCheckerWebpackPlugin())
return config;
};
Hi, this is great. Can you supply some more details on how to run it etc?
It's really simple, and the guide is here https://storybook.js.org/basics/guide-vue/
Basically:
-
install storybook globally:
npm i -g storybook -
in the project directory run
getstorybook, which should detect vue and should:-
a) add these devDepencies:
@storybook/vuebabel-core- (note even if you're not using babel, storybook is needs it, as its written in React)
-
b) create this is
package.json:-
"scripts": { "storybook": "start-storybook -p 9001 -c .storybook" } - the
-c .storybookis probably redundant as that's the default
-
-
c) getstorybook should create a
./.storybook/directory, -
if the above don't install, then add manually.
-
-
edit these files in
./.storybook/as above (or create if they don't exist):./.storybook/config.jsand./.storybook/webpack.conf.js- you'll also need the plugin: 'ForkTsCheckerWebpackPlugin' configured as above, dramatically reduces compile time (a factor of 10x in my case).
-
kick off the storybook server:
npm run storybook -
Optionally install Storybook 'addons', most work for Vue.
- HOWEVER: Storybook remounts the component everytime you use the interaction addon (called 'knobs'), so I find it better to create a Vue component for each 'story', and let that vue component interact with your component-under-test.
The other thing to be aware of is that Storybook is written in React, with the Vue components in separate iFrames. As such, Vue Devtools doesn't see the components (but it does see Vuex stores and events!).
Dave