Une erreur sera affichée dans le livre de contes lors de la création des composants suivants.
# src/components/organisms/ParentComponent/index.tsx
import * as React from 'react';
import ChildrenComponent from 'src/components/molecules/ChildrenComponent/index';
const ParentComponent: React.SFC<{}> = ({ ...props }) => (
<ChildrenComponent />
);
Erreur
Module not found: Error: Can't resolve 'src/components/molecules/ChildrenComponent/index' in '/AppRoot/src/components/organisms/ParentComponent'
Cela semble ĂȘtre causĂ© par le chargement avec un chemin absolu, donc si vous faites ce qui suit, cela fonctionne bien.
import ChildrenComponent from '../../molecules/ChildrenComponent/index';
Cependant, je voudrais éviter cette méthode autant que possible. N'y a-t-il aucun moyen de démarrer un livre d'histoires sans erreurs autres que la spécification par chemin relatif?
L'application du chemin absolu est basée sur la description suivante de tsconfig.json
.
"compilerOptions": {
"outDir": "build/dist",
"rootDir": "src",
"baseUrl": "."
}
De plus, cette fois, nous importons un fichier stories
écrit en extension tsx dans le répertoire src
compilé plutÎt que le répertoire compilé build/dist
sur le livre de contes cette fois.
Ceci est défini dans ./storybook/config
, mais le définir sur build/dist
produira des résultats similaires.
Comme ce projet utilise la conception atomique, il a à peu prÚs la structure de répertoires suivante.
src
âââ components
â âââ molecules
â â âââ ChildrenComponent
â â â âââ index.tsx
â â â âââ index.stories.tsx
â âââ organisms
â â âââ ParentComponent
â â â âââ index.tsx
â â â âââ index.stories.tsx
Il semblait y avoir quelque chose comme la question pertinente.
Cependant, il nâa pas trouvĂ© de solution.
En passant, je crois qu'il y a deux façons de résoudre ce problÚme.
La premiĂšre chose que je voudrais demander ici est de "Importer un composant de chemin absolu avec un livre de contes", la seconde est de compiler dans un fichier js
qui importe le fichier tsx
importé avec un chemin absolu comme chemin relatif. AprÚs cela, appliquez le fichier importé js
avec le chemin relatif du livre de contes.
En ce qui concerne ce dernier, je pense qu'il n'est pas approprié d'écouter ce problÚme ici, mais si vous le connaissez, je voudrais également vous poser des questions sur cette méthode.
Merci pour votre temps.
Je ne sais pas comment cela fonctionne pour vous dans votre application réguliÚre (comme quelle est votre configuration?), Mais si vous allez mettre votre cwd (en supposant -> cwd/src/components/....
) dans le resolve.modules
dans l'extension webpack.config
, cela devrait probablement résoudre votre problÚme (je l'ai vérifié avec une application Angular, mais cela n'a pas vraiment d'importance)
Mon fichier .storybook/webpack.config.js
est décrit comme suit.
Y a-t-il un problĂšme ici?
const genDefaultConfig = require('@storybook/react/dist/server/config/defaults/webpack.config.js');
module.exports = (baseConfig, env) => {
const config = genDefaultConfig(baseConfig, env);
config.module.rules.push({
test: /\.(ts|tsx)?$/,
exclude: /node_modules/,
include: [/stories/, /src/],
loader: 'ts-loader'
});
config.resolve.extensions.push('.ts', '.tsx');
return config;
};
Essayez d'ajouter quelque chose comme ceci:
const path = require('path');
// blah blah code
module.exports = (baseConfig, env) => {
// blah blah code
config.resolve.modules = [
...(config.resolve.modules || []),
path.resolve('./'),
];
}
Cela a fonctionné correctement !!
Je ne vous remercierai jamais assez!!!!!!!
@ igor-dv J'ai un problÚme similaire et j'ai essayé votre suggestion (ci-dessus), ainsi que le NormalModuleReplacementPlugin qui modifie le chemin resource.request. Ni l'un ni l'autre n'ont fonctionné
Avez-vous d'autres suggestions?
Pouvez-vous s'il vous plaĂźt partager vos exemples de code / webpack.config.js?
.storybook / webpack.config.js
const path =
require ('chemin'); `
// const webpack = require ('webpack');
const genDefaultConfig = require ('@ storybook / react / dist / server / config / defaults / webpack.config.js');
module.exports = (baseConfig, env) => {
const config = genDefaultConfig (baseConfig, env);
config.module = {
rĂšgles: [
{
test: /.tsx$/,
chargeurs: ["ts-loader"],
inclure: path.resolve (__ dirname, '../app/xv/')
},
{
test: /.scss$/,
chargeurs: [
'style-loader',
'css-loader',
'sass-loader? includePaths [] =' + encodeURIComponent (path.resolve (__ dirname, '../app/'))
]
},
{
test: /.css$/,
loader: 'style-loader! css-loader'
},
{
test: /.less$/,
loader: 'style-loader! css-loader! less-loader'
},
{
test: /.js|.ts$/,
exclure: [path.join (__ dirname, 'app / components'), / node_modules /],
chargeur: 'ng-annotate-loader'
},
{
test: /.js$/,
exclure: [path.join (__ dirname, 'app / components'), / node_modules /],
loader: 'babel-loader? presets [] = es2015 & presets [] = stage-1 & presets [] = react & cacheDirectory'
}
]
};
config.resolve.modules = [
...(config.resolve.modules || []),
path.resolve('./'),
];
return config;
// ,
// plugins: [
// new webpack.NormalModuleReplacementPlugin(/xv/, function(resource) {
// resource.request = resource.request.includes('xv/') ? '../../app/' + resource.request : resource.request;
// })
// ]
} `
// code
`import * comme React de 'react';
import {autobind} depuis 'xv / util / decorators';
import '../ styles / ActionIcon.scss'; `
// Erreur
`ERREUR dans ./app/xv/ui/components/ActionIcon.tsx
Module non trouvé: Erreur: Impossible de résoudre «xv / util / decorators» dans «/ Users / lukasanderson / workspace / NeXgen-UI / app / xv / ui / components»
@ ./app/xv/ui/components/ActionIcon.tsx 31: 0-46
@ ./.storybook/stories/actionIcons.js
@ ./.storybook/config.js
@ multi ./node_modules/@storybook/react/dist/server/config/polyfills.js ./node_modules/@storybook/react/dist/server/config/globals.js (webpack) -hot-middleware / client.js? reload = true ./. storybook / config.js`
avec / xv / mappé à la base du projet (root / app / xv / *) dans la construction habituelle du webpack dev (non storybook)
désolé pour le formatage
J'ai essayé différentes variantes du remplacement de l'expression réguliÚre avec NormalModuleReplacementPlugin, certaines trouvées dans des fils / problÚmes similaires sur le livre de contes ne gérant pas les chemins absolus
exemple:
plugins: [
new webpack.NormalModuleReplacementPlugin(/xv/, function(resource) {
resource.request = resource.request.replace(/xv/, '../../app/');
})
]
me donne cette erreur:
`ERREUR dans ./.storybook/stories/actionIcons.js
Module introuvable: Erreur: impossible de résoudre «../../app//ui/components/Tooltip» dans «/Users/lukasanderson/workspace/NeXgen-UI/.storybook/stories»
@ ./.storybook/stories/actionIcons.js 5: 0-47
@ ./.storybook/config.js
@ multi ./node_modules/@storybook/react/dist/server/config/polyfills.js ./node_modules/@storybook/react/dist/server/config/globals.js (webpack) -hot-middleware / client.js? reload = true ./.storybook/config.js
»
et ce changement (ajouter / xv / Ă la chaĂźne de remplacement)
plugins: [
new webpack.NormalModuleReplacementPlugin(/xv/, function(resource) {
resource.request = resource.request.replace(/xv/, '../../app/xv/');
})
]
donne
`ERREUR dans ./.storybook/stories/actionIcons.js
Module introuvable: Erreur: impossible de résoudre «../../app/xv//ui/components/Tooltip» dans «/Users/lukasanderson/workspace/NeXgen-UI/.storybook/stories»
@ ./.storybook/stories/actionIcons.js 5: 0-47
»
lorsque j'ai le bon remplacement de chemin pour les chemins absolus, non seulement les chemins relatifs sont perturbés, mais le chemin est `` correct '' et une erreur persiste:
ERROR in ./.storybook/stories/actionIcons.js
Module not found: Error: Can't resolve '../../app/xv/ui/components/Tooltip' in '/Users/lukasanderson/workspace/NeXgen-UI/.storybook/stories'
Quel est votre répertoire de travail (cwd)?
racine/
Je démarre le livre d'histoires à partir de NeXgen-UI (aka racine du projet)
Donc, ayant ce import { autobind } from 'xv/util/decorators';
vous devriez probablement ajouter path.resolve('./app')
au resolve.modules
bien, donc j'ai maintenant ceci
»
config.resolve = {
modules: [
...(config.resolve.modules || []),
path.resolve('./app'),
path.resolve('./')
]
};
return config;
»
et j'obtiens la mĂȘme chose:
`ERREUR dans ./app/xv/ui/components/ActionIcon.tsx
Module non trouvé: Erreur: Impossible de résoudre «xv / util / decorators» dans «/ Users / lukasanderson / workspace / NeXgen-UI / app / xv / ui / components»
»
Il semble que vous deviez Ă©galement ajouter config.resolve.extensions.push('.ts', '.tsx');
@ igor-dv J'ai essayĂ© ça aussi, mĂȘme erreur. Merci pour l'aide Ă ce sujet
đ€ Je pense que j'ai besoin de voir la reproduction, alors. Avez-vous un repo public?
Pour moi, cela a fonctionné en ajoutant __dirname
Ă path.resolve
dans ma configuration webpack, comme ceci: (je travaille sur une configuration create-react-app + TypeScript):
config.resolve.modules = [
...(config.resolve.modules || []),
path.resolve(__dirname, "../"),
path.resolve(__dirname, "../src")
];
Ma structure de fichiers, ajustez la vÎtre en conséquence:
''
/racine
/.storybook
webpack.config.js
/ src
La chose stupide que je n'ai pas réussi à réaliser est que j'ai oublié d'ajouter un ../
Ă ma configuration resolve.modules
.
Voici ce qui fonctionne pour moi:
// .storybook/webpack.config.js
module.exports = {
...,
resolve: {
modules: [path.resolve(__dirname, "../src"), "node_modules"],
}
}
C'est parce que ma configuration webpack de storybook se trouve 1 répertoire plus profond dans le répertoire par défaut .storybook
.
Au cas oĂč quelqu'un regarde ceci pour le livre d'histoires 5
const path = require('path');
module.exports = ({ config }) => {
config.resolve.modules.push(path.resolve(__dirname, "../src"));
return config;
};
Belle personne @ kexinlu1121. Cela a parfaitement fonctionné, merci.
La solution de @glocore Ă©tait l'indice dont j'avais besoin pour que cela fonctionne. Merci!
J'ai eu un problĂšme similaire oĂč mon importation absolue fonctionne dans start-storybook
mais pas lorsque je construis. Je vais simplement le mettre ici pour référence si quelqu'un veut une référence.
J'utilise @src
pour l'importation absolue et je l'ai fait fonctionner en ajoutant cette ligne:
# /root/.storybook/webpack.config.js
const path = require("path");
module.exports = ({ config }) => {
// ...
// Add absolute path.resolve so storybook can handle absolute import (eg. @src/resources/...)
config.resolve.alias = {
...config.resolve.alias,
"@src": path.resolve(__dirname, "../src"),
};
return config;
};
Pour le contexte, mon répertoire de projet ressemble à ceci:
/root
.storybook/
webpack.config.js
src/
components/
J'espĂšre que cela aide :)
@wzulfikar Merci pour votre solution!
J'ai eu ce problÚme aprÚs avoir utilisé la CLI et j'ai pu le résoudre en modifiant mon .storybook / main.js en:
const path = require('path');
module.exports = {
...other settings....,
webpackFinal: async (config) => {
config.resolve.modules = [
...(config.resolve.modules || []),
path.resolve(__dirname, "../src"),
];
return config;
},
}
Bonjour
J'utilise React / TS
J'ai eu le mĂȘme problĂšme avec mon .storybook / main.js:
const path = require('path');
module.exports = {
"stories": [
"../src/**/*.stories.mdx",
"../src/**/*.stories.@(js|jsx|ts|tsx)"
],
"addons": [
"@storybook/addon-links",
"@storybook/addon-essentials",
"@storybook/preset-create-react-app",
"@storybook/addon-knobs",
],
webpackFinal: async (config) => {
config.resolve.alias = {
...config.resolve.alias,
'fs': path.resolve(__dirname, 'fsMock.js'),
'child_process': path.resolve(__dirname, 'fsMock.js'),
'net': path.resolve(__dirname, 'fsMock.js'),
'tls': path.resolve(__dirname, 'fsMock.js'),
// "src/types": path.resolve(__dirname, "../src/types"),
// "src/components": path.resolve(__dirname, "../src/components"),
};
config.resolve.modules = [
...(config.resolve.modules || []),
path.resolve(__dirname, "../src"),
];
// config.resolve.extensions.push('.ts', '.tsx');
return config;
},
}
ma structure
.storybook
src
âââ components
| index.ts
â âââ ChildrenComponent
â â âââ index.tsx
â â âââ index.stories.tsx
â âââ ParentComponent
â â âââ index.tsx
â â âââ index.stories.tsx
âââ stories
Un composant ParentComponent
import React from "react";
import { ChildrenComponent } from "src/components";
import { ItemType } from "src/types";
export default ({ item }: { item: ItemType }) => {
return (
<p className="hello">
<ChildrenComponent type={item.type} />
<span className="ellipsis">{item.title}</span>
</p>
);
};
Le problĂšme vient de src/components
parce que je fais src/components/ChildrenComponent
ça marche.
Je ne comprends pas j'ai tout essayé ici et # 333 # 3291 et bien d'autres
Une capture d'Ă©cran de l'erreur
Quelqu'un peut-il aider?
Commentaire le plus utile
Au cas oĂč quelqu'un regarde ceci pour le livre d'histoires 5