我在TypeScript中将Storybook与Vue一起使用。有no official TypeScript configurations yet可以将Vue与故事书一起使用。
如何配置Webpack,以便在.storybook.ts中可以从另一个.storybook.ts文件导入?
当前我遇到错误:
ERROR in ./src/components/Button/Button.stories.ts
Module not found: Error: Can't resolve '../Icon/Icon.stories'
in '/Users/dude/monorepo/frontend/storybook/src/components/Button'
通过此导入:
import AppButton from './Button.vue';
import { iconPackOptions, iconPackDefaultValue } from '../Icon/Icon.stories';
当 src / components / Icon / Icon.stories.ts 文件包含以下内容时:
import { storiesOf } from '@storybook/vue';
import { withKnobs, text, select } from '@storybook/addon-knobs';
import AppIcon from './Icon.vue';
// Knobs grouping
const groupId01 = 'icon';
// Icon Pack
export const iconPackOptions = {
None: false,
FontAwesomeProRegular: 'far',
FontAwesomeFreeBrands: 'fab'
};
export const iconPackDefaultValue = iconPackOptions.FontAwesomeProRegular;
带有 ./。storybook / webpack.config.js 文件内容:
const ForkTsCheckerWebpackPlugin = require('fork-ts-checker-webpack-plugin');
const path = require('path');
module.exports = async ({ config }) => {
config.module.rules.push({
test: /\.css$/,
loaders: ['style-loader', 'css-loader', 'postcss-loader'],
include: path.resolve(__dirname, '../'),
});
config.module.rules.push({
test: /\.scss$/,
use: ['style-loader', 'css-loader', 'sass-loader'],
include: path.resolve(__dirname, '../assets/styles')
});
config.resolve = {
extensions: ['.js', '.vue', '.json'],
alias: {
vue$: 'vue/dist/vue.esm.js',
'assets': path.resolve('../src/assets'),
'@': path.join(__dirname, '../src'),
}
};
config.module.rules.push({
test: /\.ts$/,
exclude: /node_modules/,
use: [
{
loader: 'ts-loader',
options: {
appendTsSuffixTo: [/\.vue$/],
transpileOnly: true
},
}
]
});
config.plugins.push(new ForkTsCheckerWebpackPlugin());
return config;
};
带有 ./。storybook / config.js 文件内容:
import { configure } from '@storybook/vue';
import '../src/plugins';
import '../src/assets/styles/main.scss';
const req = require.context('../src/components', true, /.stories.ts$/);
function loadStories() {
req.keys().forEach(filename => req(filename));
}
configure(loadStories, module);
答案 0 :(得分:0)
此 .storybook / webpack.config.js 与故事源插件一起为我工作。如果您不需要故事源,只需使用@storybook/addon-storysource/loader
删除use loader对象:
const ForkTsCheckerWebpackPlugin = require('fork-ts-checker-webpack-plugin');
const path = require('path');
module.exports = async ({ config }) => {
config.module.rules.push({
test: /\.css$/,
loaders: ['style-loader', 'css-loader', 'postcss-loader'],
include: path.resolve(__dirname, '../'),
});
config.module.rules.push({
test: /\.scss$/,
use: ['style-loader', 'css-loader', 'sass-loader'],
include: path.resolve(__dirname, '../assets/styles')
});
config.resolve = {
extensions: ['.js', '.vue', '.json'],
alias: {
vue$: 'vue/dist/vue.esm.js',
'assets': path.resolve('../src/assets'),
'@': path.join(__dirname, '../src'),
}
};
config.module.rules.push({
test: /\.stories\.ts?$/,
exclude: /node_modules/,
use: [
{
loader: require.resolve('babel-loader')
},
{
loader: require.resolve('@storybook/addon-storysource/loader')
}
]
});
config.module.rules.push({
test: /\.ts$/,
exclude: /node_modules/,
use: [
{
loader: 'ts-loader',
options: {
appendTsSuffixTo: [/\.vue$/],
transpileOnly: true
},
}
]
});
config.plugins.push(new ForkTsCheckerWebpackPlugin());
return config;
};