Storybook Vue Typescript:找不到模块:错误:无法解析

Cor*_*sen 5 typescript vue.js storybook

我有一个 Typescript Vue monorepo 项目(yarn 工作区),其中包含 3 个包:web、样式和组件。对于组件包,我想利用 Storybook 进行可视化测试和隔离开发。

当我将它们导入到 Web 项目中时,这些组件可以正常工作,但是当我运行 Storybook 时,出现以下错误:

Module not found: Error: Can't resolve './../components' in 'jdk-darts-frontend/packages/jdk-darts-components/.storybook'
 @ ./.storybook/config.ts 
Run Code Online (Sandbox Code Playgroud)

故事书管理器 webpack 配置似乎存在 typescript/vue 导入问题。

故事书配置:

import Vue from 'vue';
import {addParameters, configure} from '@storybook/vue';
import {Button, Card, FinalInput, Icon, Input, Modal, Table} from './../components';

...

Vue.component('d-button', Button);
Vue.component('d-card', Card);
Vue.component('d-icon', Icon);
Vue.component('d-input', Input);
Vue.component('d-final-form-input', FinalInput);
Vue.component('d-modal', Modal);
Vue.component('d-table', Table);

function loadStories() {
  const req = require.context('../components', true, /\.stories\.ts$/);
  req.keys().forEach(filename => req(filename));
}

configure(loadStories, module);
Run Code Online (Sandbox Code Playgroud)

Storybook 管理器 webpack 配置:

async function managerWebpack(config, options) {
  config.resolve.extensions.push('.ts', '.tsx', '.vue', '.css', '.scss', '.html');

  config.module.rules.push({
    test: /\.ts$/,
    exclude: /node_modules/,
    use: [
      {
        loader: 'ts-loader',
        options: {
          appendTsSuffixTo: [/\.vue$/],
          transpileOnly: true,
        },
      },
    ],
  });

  config.resolve = {
    alias: {
      'vue$': 'vue/dist/vue.esm.js',
      '@': path.dirname(path.resolve(__dirname, "../components")),
    },
  };

  return config;
}

module.exports = {
  managerWebpack: managerWebpack,
};
Run Code Online (Sandbox Code Playgroud)

故事书模板 webpack 配置

module.exports = async ({config}) => {
  config.resolve.extensions.push('.ts', '.tsx', '.vue', '.css', '.scss', '.html');

  config.module.rules.push({
    test: /\.ts$/,
    exclude: /node_modules/,
    use: [
      {
        loader: 'ts-loader',
        options: {
          appendTsSuffixTo: [/\.vue$/],
          transpileOnly: true,
        },
      },
    ],
  });

    config.module.rules.push({
        test: /\.scss$/,
        use: [
            'vue-style-loader',
            'css-loader',
            {
                loader: 'sass-loader',
                options: {
          data: `@import "~jdk-darts-styles/scss/index.scss";`,
          implementation: require('sass'),
        },
      },
        ],
    });

    config.resolve = {
        alias: {
            'vue$': 'vue/dist/vue.esm.js',
      '@': path.dirname(path.resolve(__dirname, "../src")),
    },
    };

    return config;
};
Run Code Online (Sandbox Code Playgroud)

使用多个index.ts 文件导入组件。

GIT存储库:https://bitbucket.org/jdkdarts/jdk-darts-frontend/src/31606627861f8674486b854de520e294d7aa6ab2/ ?at=feature/JDKDAR-03_create_new_game