Yas*_*net 3 javascript reactjs webpack
我在使用create-react-app和craco设置webpack别名路径时遇到问题,已经使用谷歌搜索但无法解决问题。
Module not found: Can't resolve '@app/App' in 'C:\ReactSandbox\my-project\src每次我使用命令运行应用程序时都会出错yarn start
create-react-app my-projectcd my-projectyarn add @craco/cracocat > craco.config.js (见下面的配置)react-scripts为cracopackage.json 上的“脚本”部分(craco start、craco build 等)src/index.js (替换第 4 行,见下面的代码)yarn startconst path = require("path");
module.exports = {
webpack: {
resolve: {
alias: {
"@app": path.resolve(__dirname, "src/"),
}
}
}
};
Run Code Online (Sandbox Code Playgroud)
import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import App from '@app/App'; //replace './App' into '@app/App'
import * as serviceWorker from './serviceWorker';
ReactDOM.render(<App />, document.getElementById('root'));
serviceWorker.unregister();
Run Code Online (Sandbox Code Playgroud)
Module not found: Can't resolve '@app/App' in 'C:\ReactSandbox\my-project\src
我避免调用相对路径地狱,而不是像这样的导入模块../../../../FilterComment.js,写起来很干净@app/FilterComment.js
小智 11
解决carco:
你需要安装craco-alias,然后写入 craco.config.js
const CracoAlias = require('craco-alias')
module.exports = {
plugins: [
{
plugin: CracoAlias,
options: {
source: 'tsconfig',
baseUrl: '.',
tsConfigPath: './tsconfig.path.json',
},
},
],
}
Run Code Online (Sandbox Code Playgroud)
tsconfig.path.json
{
"compilerOptions": {
"baseUrl": ".",
"paths": {
"@/*": ["src/*"],
"@svg/*": ["src/assets/svg/*"],
"@img/*": ["src/assets/images/*"],
"@icons/*": ["src/assets/icons/*"],
"@shared/*": ["src/shared/*"],
"@components/*": ["src/components/*"],
"@hooks/*": ["src/hooks/*"],
"@constants/*": ["src/constants/*"],
"@layout/*": ["src/layout/*"],
"@services/*": ["src/services/*"]
}
}
}
Run Code Online (Sandbox Code Playgroud)
tsconfig.json
{
"extends": "./tsconfig.path.json",
"compilerOptions": {
"target": "es5",
"lib": [
"dom",
"dom.iterable",
"esnext"
],
"allowJs": true,
"checkJs": false,
"skipLibCheck": true,
"esModuleInterop": true,
"allowSyntheticDefaultImports": true,
"declaration": false,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"strict": true,
"forceConsistentCasingInFileNames": true,
"module": "esnext",
"moduleResolution": "node",
"resolveJsonModule": true,
"isolatedModules": true,
"noEmit": true,
"jsx": "react-jsx",
"noFallthroughCasesInSwitch": true,
"removeComments": true
},
"include": [
"src",
"src/configs",
"react-app-env.d.ts"
]
}
Run Code Online (Sandbox Code Playgroud)
我的 craco.config.js 如下所示,它可以工作:
const path = require('path');
module.exports = {
// ...
webpack: {
alias: {
'@': path.join(path.resolve(__dirname, './src')),
}
}
}
Run Code Online (Sandbox Code Playgroud)
创建单独的文件tsconfig.paths.json并添加别名:
{
"compilerOptions": {
"baseUrl": "./src",
"paths": {
"@utils/*": ["utils/*"]
}
}
}
Run Code Online (Sandbox Code Playgroud)
添加创建tsconfig.paths.json到主tsconfig.json
{
"extends": "./tsconfig.paths.json",
... other staff ...
}
Run Code Online (Sandbox Code Playgroud)
将别名添加到 config-overrides.js
const {
override,
addWebpackAlias
} = require('customize-cra');
const path = require("path");
module.exports = override(
addWebpackAlias({
"@utils": path.resolve(__dirname, "./src/utils"),
}),
);
Run Code Online (Sandbox Code Playgroud)