I am currently using Storybook (v.5.3.18) with TypeScript and have successfully followed the instructions to set up my TypeScript webpack.config.js. This works fine.
However, I cannot seem to find any way of successfully adding a babel plugin to the config. My latest attempt is below, which does not work.
module.exports = (baseConfig, env, config) => {
config.module.rules.push({
test: /\.(ts|tsx)$/,
use: [
{
loader: require.resolve('awesome-typescript-loader'),
options: {
exclude: /node_modules/,
presets: [['react-app', { flow: false, typescript: true }]],
configFileName: './.storybook/tsconfig.json',
babelOptions: {
babelrc: false,
presets: [],
plugins: ['emotion'],
},
},
},
{
loader: require.resolve('react-docgen-typescript-loader'),
options: {},
},
],
});
config.resolve.extensions.push('.ts', '.tsx');
return config;
};
If I boot Storybook with this config, I continue to see the message "Component selectors can only be used in conjunction with babel-plugin-emotion.", which means that the Emotion babel plugin is not being picked up by Storybook.
I am not using CRA, just plain ol' React and Typescript.
Here's my tsconfig:
{
"pilerOptions": {
"outDir": "build/lib",
"module": "monjs",
"strictNullChecks": true,
"skipLibCheck": true,
"moduleResolution": "node",
"esModuleInterop": true,
"experimentalDecorators": true,
"jsx": "react",
"noUnusedParameters": true,
"noUnusedLocals": true,
"noImplicitAny": true,
"noImplicitThis": true,
"declaration": true,
"allowSyntheticDefaultImports": true,
"emitDecoratorMetadata": true,
"target": "es5",
"lib": ["es5", "es6", "es7", "es2017", "dom"],
"sourceMap": true,
"types": ["react", "node"],
"baseUrl": "../",
"paths": {
"~*": ["./src*"],
"ponents": ["./src/ponents/*"],
"ui-ponents": ["./src/ui-ponents/*"],
"pages": ["./src/pages/*"],
"mon": ["src/mon/*"],
"mocks": ["./mocks/*"],
"lib": ["./lib/*"]
}
},
"include": ["src/**/*", "../src/typings.d.ts"],
"exclude": [
"node_modules",
"build",
"dist",
"scripts",
"acceptance-tests",
"webpack",
"jest",
"src/setupTests.ts",
"**/*/*.test.ts",
"examples"
]
}
and my .babelrc:
{
"presets": ["@babel/preset-react"],
"plugins": [
"inline-svg",
["emotion", { "inline": true }],
[
"module-resolver",
{
"root": ["."],
"alias": {
"~": "./src",
"mon": "./src/mon",
"ponents": "./src/ponents",
"ui-ponents": "./src/ui-ponents",
"lib": "./lib",
"pages": "./pages",
"static": "./public/static"
}
}
]
]
}
Any suggestions?
Thanks.
I am currently using Storybook (v.5.3.18) with TypeScript and have successfully followed the instructions to set up my TypeScript webpack.config.js. This works fine.
However, I cannot seem to find any way of successfully adding a babel plugin to the config. My latest attempt is below, which does not work.
module.exports = (baseConfig, env, config) => {
config.module.rules.push({
test: /\.(ts|tsx)$/,
use: [
{
loader: require.resolve('awesome-typescript-loader'),
options: {
exclude: /node_modules/,
presets: [['react-app', { flow: false, typescript: true }]],
configFileName: './.storybook/tsconfig.json',
babelOptions: {
babelrc: false,
presets: [],
plugins: ['emotion'],
},
},
},
{
loader: require.resolve('react-docgen-typescript-loader'),
options: {},
},
],
});
config.resolve.extensions.push('.ts', '.tsx');
return config;
};
If I boot Storybook with this config, I continue to see the message "Component selectors can only be used in conjunction with babel-plugin-emotion.", which means that the Emotion babel plugin is not being picked up by Storybook.
I am not using CRA, just plain ol' React and Typescript.
Here's my tsconfig:
{
"pilerOptions": {
"outDir": "build/lib",
"module": "monjs",
"strictNullChecks": true,
"skipLibCheck": true,
"moduleResolution": "node",
"esModuleInterop": true,
"experimentalDecorators": true,
"jsx": "react",
"noUnusedParameters": true,
"noUnusedLocals": true,
"noImplicitAny": true,
"noImplicitThis": true,
"declaration": true,
"allowSyntheticDefaultImports": true,
"emitDecoratorMetadata": true,
"target": "es5",
"lib": ["es5", "es6", "es7", "es2017", "dom"],
"sourceMap": true,
"types": ["react", "node"],
"baseUrl": "../",
"paths": {
"~*": ["./src*"],
"ponents": ["./src/ponents/*"],
"ui-ponents": ["./src/ui-ponents/*"],
"pages": ["./src/pages/*"],
"mon": ["src/mon/*"],
"mocks": ["./mocks/*"],
"lib": ["./lib/*"]
}
},
"include": ["src/**/*", "../src/typings.d.ts"],
"exclude": [
"node_modules",
"build",
"dist",
"scripts",
"acceptance-tests",
"webpack",
"jest",
"src/setupTests.ts",
"**/*/*.test.ts",
"examples"
]
}
and my .babelrc:
{
"presets": ["@babel/preset-react"],
"plugins": [
"inline-svg",
["emotion", { "inline": true }],
[
"module-resolver",
{
"root": ["."],
"alias": {
"~": "./src",
"mon": "./src/mon",
"ponents": "./src/ponents",
"ui-ponents": "./src/ui-ponents",
"lib": "./lib",
"pages": "./pages",
"static": "./public/static"
}
}
]
]
}
Any suggestions?
Thanks.
Share Improve this question asked May 13, 2020 at 18:16 MLyckMLyck 5,80513 gold badges49 silver badges76 bronze badges2 Answers
Reset to default 3I don't know if might solve your issue, but i got mine by just using this configuration in .storybook/main.js
:
module.exports = {
stories: ['../packages/**/*.stories.tsx'],
webpackFinal: async (config) => {
config.module.rules.push({
test: /\.(ts|tsx)$/,
loader: require.resolve('babel-loader'),
options: {
plugins: ['emotion'],
presets: [['react-app', { flow: false, typescript: true }]],
},
});
config.resolve.extensions.push('.ts', '.tsx');
return config;
},
};
I'm not using any custom webpack config (apart from that one), and with this you won't have type-chicking when developing on storybook, so you should check if this fits your needs.
Hope it helps somehow.
This one working for me:
First add
devDependency:
"babel-plugin-emotion": "^10.0.33",
then into storybook main.js config file add following
module.exports = {
...
babel: async (options) => ({
...options,
plugins: ['emotion']
}),
...
}
发布者:admin,转转请注明出处:http://www.yc00.com/questions/1745222641a4617319.html
评论列表(0条)