reactjs - Fail cerita Storybook yang ditulis dalam TypeScript tidak dikendalikan dengan betul
Saya baru-baru ini memindahkan projek CRA saya ke Next.js. Saya menggunakan Storybook dalam projek itu, jadi terpaksa mengedit banyak konfigurasi, tetapi masih terdapat masalah berkaitan TypeScript yang belum diselesaikan.
Ini adalah contoh fail cerita saya.
import { ComponentStory, ComponentMeta } from '@storybook/react';
import Index from 'pages/profile';
export default {
title: 'Views/Profile',
component: Index,
} as ComponentMeta<typeof Index>;
export const IndexTemplate: ComponentStory<typeof Index> = (args) => <Index {...args} />;
Setiap kali saya menjalankan storybook, 'as' mendapat ralat seperti ini:
at Parser._raise (/Users/hannah/work/pomelo-micro/node_modules/@babel/parser/src/parser/error.js:150:45)
at Parser.raiseWithData (/Users/hannah/work/pomelo-micro/node_modules/@babel/parser/src/parser/error.js:145:17)
at Parser.raise (/Users/hannah/work/pomelo-micro/node_modules/@babel/parser/src/parser/error.js:89:17)
at Parser.semicolon (/Users/hannah/work/pomelo-micro/node_modules/@babel/parser/src/parser/util.js:143:10)
at Parser.parseExportDefaultExpression (/Users/hannah/work/pomelo-micro/node_modules/@babel/parser/src/parser/statement.js:2118:10)
at Parser.parseExport (/Users/hannah/work/pomelo-micro/node_modules/@babel/parser/src/parser/statement.js:1993:31)
at Parser.parseStatementContent (/Users/hannah/work/pomelo-micro/node_modules/@babel/parser/src/parser/statement.js:431:25)
at Parser.parseStatement (/Users/hannah/work/pomelo-micro/node_modules/@babel/parser/src/parser/statement.js:329:17)
at Parser.parseBlockOrModuleBlockBody (/Users/hannah/work/pomelo-micro/node_modules/@babel/parser/src/parser/statement.js:1073:25)
at Parser.parseBlockBody (/Users/hannah/work/pomelo-micro/node_modules/@babel/parser/src/parser/statement.js:1049:10)
at Parser.parseProgram (/Users/hannah/work/pomelo-micro/node_modules/@babel/parser/src/parser/statement.js:214:10)
at Parser.parseTopLevel (/Users/hannah/work/pomelo-micro/node_modules/@babel/parser/src/parser/statement.js:197:25)
at Parser.parse (/Users/hannah/work/pomelo-micro/node_modules/@babel/parser/src/parser/index.js:41:10)
at parse (/Users/hannah/work/pomelo-micro/node_modules/@babel/parser/src/index.js:58:38)
at parser (/Users/hannah/work/pomelo-micro/node_modules/@babel/core/lib/parser/index.js:52:34)
at parser.next (<anonymous>)
at processResult (/Users/hannah/work/pomelo-micro/node_modules/webpack/lib/NormalModule.js:753:19)
at /Users/hannah/work/pomelo-micro/node_modules/webpack/lib/NormalModule.js:855:5
at /Users/hannah/work/pomelo-micro/node_modules/loader-runner/lib/LoaderRunner.js:399:11
at /Users/hannah/work/pomelo-micro/node_modules/loader-runner/lib/LoaderRunner.js:251:18
at context.callback (/Users/hannah/work/pomelo-micro/node_modules/loader-runner/lib/LoaderRunner.js:124:13)
at /Users/hannah/work/pomelo-micro/node_modules/babel-loader/lib/index.js:59:103
ModuleBuildError: Module build failed (from ./node_modules/babel-loader/lib/index.js):
SyntaxError: /Users/hannah/work/pomelo-micro/src/stories/views/profile/Update.stories.tsx: Missing semicolon. (23:1)
dan ini adalah fail .storybook/main.ts yang saya ada. Saya telah memasang addon @storybook/preset-typescript kerana ia nampaknya menyelesaikan masalah ini.
const path = require('path');
module.exports = {
typescript: {
check: false,
checkOptions: {},
reactDocgen: 'react-docgen-typescript',
reactDocgenTypescriptOptions: {
compilerOptions: {
allowSyntheticDefaultImports: false,
esModuleInterop: false,
},
shouldExtractLiteralValuesFromEnum: true,
propFilter: (prop) => (prop.parent ? !/node_modules/.test(prop.parent.fileName) : true),
},
},
webpackFinal: async (config) => {
config.resolve.alias = {
...config.resolve.alias,
// mock module for storybook testing
'next/image': path.resolve(__dirname, '../__mocks__/next/image.js'),
'next/link': path.resolve(__dirname, '../__mocks__/next/link.js'),
'next/router': path.resolve(__dirname, '../__mocks__/next/router.js'),
};
return config;
},
stories: ['../src/**/*.stories.mdx', '../src/**/*.stories.@(js|jsx|ts|tsx)'],
addons: [
'@storybook/addon-links',
'@storybook/addon-essentials',
'@storybook/preset-create-react-app',
'@storybook/addon-queryparams',
'storybook-react-i18next',
'@storybook/preset-typescript',
],
framework: '@storybook/react',
core: {
builder: 'webpack5',
},
};
Saya terpaksa menambah pembina webpack5 seperti yang didokumentasikan di halaman rasmi Storybook untuk menukar projek kepada Next.js. Saya belum pasti apa yang menyebabkan isu ini.
Imej log ralat
Jawapan #1
Mungkin sekarang anda mempunyai ralat:
SyntaxError: /Users/hannah/work/pomelo-micro/src/stories/views/profile/Update.stories.tsx: Missing semicolon. (23:1)Semak fail itu dan tambah titik koma?