首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我如何添加CopyWebpackPlugin创建-反应-应用程序而不弹出?

我如何添加CopyWebpackPlugin创建-反应-应用程序而不弹出?
EN

Stack Overflow用户
提问于 2018-08-20 01:46:31
回答 4查看 9.7K关注 0票数 10

我正在构建一个react应用程序和,我希望将所有的图像文件从源目标复制到构建目标。我正在学习一些教程,到目前为止我已经成功地使用了react-app-wiredCopyWebpackPlugin

我没有错误,也没有文件被复制。

这是我的config-overrides.js

代码语言:javascript
复制
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

代码语言:javascript
复制
{
  "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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-08-24 08:47:24

假设您只想在构建时将文件从-/src/<somewhere>移动到./<somewhereElse>

您只需在build脚本中添加一个额外的package.json步骤即可。下面这一步完全在你的控制范围内,不涉及任何创建-反应-应用程序脚本或配置。

例如,我使用了ncp 套餐,但是如果您想要更细粒度的控制,也可以使用ncp甚至使用原始节点fs创建自己的“步骤”。

下面是一种复制我所做的事情的方法:

设置

代码语言:javascript
复制
npx create-react-app img-upload
cd img-upload/
yarn add --dev ncp

测试数据创建src/图像/文件夹结构并放入文件

代码语言:javascript
复制
ls -R src/images/
src/images/:
badge.jpg  folder1

src/images/folder1:
applause.gif  blank.png

Package.json

我只编辑了这个部分:"build": "ncp './src/images' './public/images' && react-scripts build",

代码语言:javascript
复制
{
  "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"
  }
}

测试:运行生成前的

代码语言:javascript
复制
ls public
favicon.ico  index.html  manifest.json

运行构建后:yarn build

代码语言:javascript
复制
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脚本即可。

代码语言:javascript
复制
"build": "react-scripts build && ncp './src/images' './build/images'",

这样,您将不会污染您的公用文件夹,您可能希望保留在您的源代码管理。

票数 8
EN

Stack Overflow用户

发布于 2018-08-24 07:09:44

绝对不建议修改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

票数 5
EN

Stack Overflow用户

发布于 2020-10-05 21:10:39

我的工作是这样的:

代码语言:javascript
复制
const { override, addWebpackPlugin } = require('customize-cra');
module.exports = {
webpack: override(
    addWebpackPlugin(
        new CopyWebpackPlugin({
            patterns: [
                { from: 'src/config', to: 'config' }
            ],
        })
    )
)

在此之后,我将获取config文件夹的内容,并在构建中创建一个相等的内容(也称为config )。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51923251

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档