![](/img/trans.png)
[英]How can I disable CSS builds in create-react-app without ejecting?
[英]How can I add the CopyWebpackPlugin to create-react-app without ejecting?
我正在构建一个 React 应用程序,我想将所有图像文件从源目标复制到构建目标。 我正在学习一些教程,到目前为止设法使用react-app-wired
和CopyWebpackPlugin
我没有收到任何错误,也没有复制任何文件。
这是我的config-overrides.js
const CopyWebpackPlugin = require('copy-webpack-plugin');
module.exports = function override(config, env) {
if (!config.plugins) {
config.plugins = [];
}
config.plugins.push(
new CopyWebpackPlugin(
[
{
from: 'src/images',
to: 'public/images'
}
])
);
return config;
};
这是我的package.json
{
"name": "public",
"version": "0.1.0",
"private": true,
"dependencies": {
"axios": "^0.18.0",
"copy-webpack-plugin": "^4.5.2",
"css-loader": "^1.0.0",
"prop-types": "^15.6.2",
"react": "^16.4.2",
"react-app-rewired": "^1.5.2",
"react-axios": "^2.0.0",
"react-dom": "^16.4.2",
"react-router-dom": "^4.3.1",
"react-scripts": "1.1.4",
"react-slick": "^0.23.1",
"slick-carousel": "^1.8.1",
"typeface-montserrat": "0.0.54",
"webfontloader": "^1.6.28"
},
"scripts": {
"build-css": "node-sass-chokidar src/ -o src/",
"watch-css": "npm run build-css && node-sass-chokidar src/ -o src/ --watch --recursive",
"start-js": "react-app-rewired start",
"start": "npm-run-all -p watch-css start-js",
"build-js": "react-app-rewired build",
"build": "npm-run-all build-css build-js",
"test": "react-app-rewired test --env=jsdom",
"eject": "react-scripts eject"
},
"devDependencies": {
"npm-run-all": "^4.1.3",
"style-loader": "^0.22.1"
}
}
我的文件夹结构是
src/images src/images/file.jpg src/images/slider/1.png src/images/slider/2.png public/images (empty) so far
假设您只想在构建时将文件从-/src/<somewhere>
到./<somewhereElse>
。
您可以在 package.json 中为您的build
脚本添加一个额外的步骤。 下面的步骤完全由您控制,不会与任何 create-react-app 脚本或配置混淆。
例如,我使用了ncp
包,但如果您想要更精细的控制,您也可以使用 ncp 甚至原始节点 fs api 创建自己的“步骤”。
这是一种复制我所做的事情的方法:
设置
npx create-react-app img-upload
cd img-upload/
yarn add --dev ncp
测试数据创建 src/images/ 文件夹结构并放入文件
ls -R src/images/
src/images/:
badge.jpg folder1
src/images/folder1:
applause.gif blank.png
包.json
我只编辑了部分: "build": "ncp './src/images' './public/images' && react-scripts build",
{
"name": "img-upload",
"version": "0.1.0",
"private": true,
"dependencies": {
"react": "^16.4.2",
"react-dom": "^16.4.2",
"react-scripts": "1.1.5"
},
"scripts": {
"start": "react-scripts start",
"build": "ncp './src/images' './public/images' && react-scripts build",
"test": "react-scripts test --env=jsdom",
"eject": "react-scripts eject"
},
"devDependencies": {
"ncp": "^2.0.0"
}
}
测试:在运行构建之前:
ls public
favicon.ico index.html manifest.json
运行构建后: yarn build
ls public
favicon.ico images index.html manifest.json
ls -R public/images
public/images/:
badge.jpg folder1
public/images/folder1:
applause.gif blank.png
ls build
asset-manifest.json favicon.ico images index.html manifest.json service-worker.js static
ls -R build/images
build/images/:
badge.jpg folder1
build/images/folder1:
applause.gif blank.png
建议我假设您最终需要build
目录中的这些文件。 如果是这样,您可以切换build
脚本。
"build": "react-scripts build && ncp './src/images' './build/images'",
这样您就不会污染您的公用文件夹,您可能希望将其保留在源代码管理中。
绝对不建议修改node_modules/react-scripts/config/webpack.config.dev.js
文件,因为这会在更新此特定包时中断。 也很可能你会在你的版本控制系统中忽略node_modules
,这意味着这个配置不会在开发人员之间共享或备份。
虽然我没有亲自尝试过,你可以使用这样的东西: https : //github.com/timarney/react-app-rewired来覆盖 Webpack 配置。
您可以在此处查看教程: https : //medium.com/@timarney/but-i-dont-wanna-eject-3e3da5826e39
我的工作是这样的:
const { override, addWebpackPlugin } = require('customize-cra');
module.exports = {
webpack: override(
addWebpackPlugin(
new CopyWebpackPlugin({
patterns: [
{ from: 'src/config', to: 'config' }
],
})
)
)
有了这个,我将获取我的 config 文件夹的内容并在构建中创建一个相同的文件夹,也称为 config。
我认为问题是因为您将webpack-dev-server
与copy-webpack-plugin
一起使用。 如果是这样, copy-webpack-plugin
会将文件复制到webpack-dev-server
工作的虚拟目录。 所以,在这种情况下,你需要再添加一个插件来实现它
如果你想让 webpack-dev-server 在开发过程中将文件写入输出目录,你可以使用 write-file-webpack-plugin 强制它。
import WriteFilePlugin from 'write-file-webpack-plugin';
网络包配置:
config.plugins.push(
new CopyWebpackPlugin(
[
{
from: 'src/images',
to: 'public/images'
}
])
);
config.plugins.push(new WriteFilePlugin());
更多信息可以访问官方文档: https : //webpack.js.org/plugins/copy-webpack-plugin/
希望这有效!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.