我正在使用create-react-app。我试图从我的src/components内部的文件中调用我的公共文件夹中的图像。我收到这个错误信息。
./src/components/website_index.js模块未找到:你试图
import ../../public/images/logo/WC-BlackonWhite.jpg
在项目src/目录之外。国外的相对进口
Src /不支持。您可以将它移动到src/,或者添加一个
从项目的node_modules/到它的符号链接。
从“../../public/images/logo_2016.png”导入logo;
<img className="Header-logo" src={logo} alt=" logo" />
我读过很多东西,说你可以做一个导入的路径,但这仍然不是为我工作。任何帮助都将不胜感激。我知道有很多这样的问题,但他们都告诉我导入标志或形象,所以很明显,我在大局中遗漏了一些东西。
如果你需要多次修改,比如使用蚂蚁设计,你可以像这样组合多个功能:
const {
override,
removeModuleScopePlugin,
fixBabelImports,
} = require('customize-cra');
module.exports = override(
fixBabelImports('import', {
libraryName: 'antd',
libraryDirectory: 'es',
style: 'css',
}),
removeModuleScopePlugin(),
);
这是一个相对导入的问题,这可能是因为我们使用了“create-react-app project”命令,该命令形成了一个名为project的目录,其中包含node_modules文件夹和其中的public和src文件夹中的其他几个文件。
create-react-app命令设置了一个限制,我们不能从src外部导入任何东西。
我的问题:
我必须导入在src文件夹外的node_modules文件夹中创建的react-bootstrap css文件。
我使用导入“../node_modules/bootstrap/dist/css/bootstrap.min.css”;但是我在终端上得到了错误。
我发现我可以创建一个新的react应用程序,并遵循从a到G的解决步骤,以解决这个问题。
解决方案:
A)创建一个新的react应用,使用Create -react-app new
B) cd new
C)运行以下命令:"npm install react-bootstrap bootstrap@4.6.0"(不带""双引号)
D)在你的react文件中导入bootstrap:
D.1)导入“../node_modules/bootstrap/dist/css/bootstrap.min.css”;
或
D.2)从“react-bootstrap/Button”导入按钮;
E)在你的react文件中创建一个类似Button或任何东西的引导元素,用于D.1) < Button className="btn btn-success" >引导< / Button >
或
2) <按钮变量="primary"> Bootstrap < /按钮>
F)在终端:cd src
G)在终端:npm启动,
这一次它将被成功编译。
推理:
当我按顺序执行步骤A到G时,我可以看到react-bootstrap终于开始工作了,这一次我没有得到任何错误。
(我想到这个解决方案是因为:
我已经使用npm安装“@material-ui/icons”,它被安装在src之外的node_modules文件夹中。
在我的react文件中,我使用了import Add from“@material-ui/icons/Add”
材质界面图标对我来说工作得很好,
但这里我们也从src外部导入,从node_modules..一切都很正常。为什么这次从src外部导入没有错误)
这就是为什么我刚刚创建了一个新的react应用程序,并遵循解决方案步骤a到G。
如果您只需要导入单个文件,如README。Md或package。json,那么它可以显式地添加到ModuleScopePlugin()
配置/ paths.js
const resolveApp = relativePath => path.resolve(appDirectory, relativePath);
module.exports = {
appPackageJson: resolveApp('package.json'),
appReadmeMD: resolveApp('README.md'),
};
Config /webpack.config.dev.js + Config /webpack.config.prod.js
module.exports = {
resolve: {
plugins: [
// Prevents users from importing files from outside of src/ (or node_modules/).
// This often causes confusion because we only process files within src/ with babel.
// To fix this, we prevent you from importing files out of src/ -- if you'd like to,
// please link the files into your node_modules/ and let module-resolution kick in.
// Make sure your source files are compiled, as they will not be processed in any way.
new ModuleScopePlugin(paths.appSrc, [
paths.appPackageJson,
paths.appReadmeMD // README.md lives outside of ./src/ so needs to be explicitly included in ModuleScopePlugin()
]),
]
}
}
下面是一个在简单情况下工作得很好的替代方案(使用fs和ncp)。在开发过程中,保持一个脚本运行,以监视/src之外的共享文件夹的更改。当进行更改时,脚本可以自动将共享文件夹复制到项目中。下面是递归地查看单个目录的示例:
// This should be run from the root of your project
const fs = require('fs')
const ncp = require('ncp').ncp;
ncp.limit = 16
// Watch for file changes to your shared directory outside of /src
fs.watch('../shared', { recursive: true }, (eventType, filename) => {
console.log(`${eventType}: ${filename}`)
// Copy the shared folder straight to your project /src
// You could be smarter here and only copy the changed file
ncp('../shared', './src/shared', function(err) {
if (err) {
return console.error(err);
}
console.log('finished syncing!');
});
})
安装这两个包
npm i --save-dev react-app-rewired customize-cra
package.json
"scripts": {
- "start": "react-scripts start"
+ "start": "react-app-rewired start"
},
config-overrides.js
const { removeModuleScopePlugin } = require('customize-cra');
module.exports = function override(config, env) {
if (!config.plugins) {
config.plugins = [];
}
removeModuleScopePlugin()(config);
return config;
};