Reactjs - /dist文件夹只有两个文件 - bundle.js和bundle.js.map - 不包括任何其他文件

3

我有一个ReactJS应用程序 - 在开发环境中正常运行。我的意思是,当我使用

npm start

它正在本地主机的8080端口顺利运行。

当我尝试使用以下命令来执行相同操作,以生成一个用于在AWS S3上进行静态托管的分发文件夹时,问题就出现了。

npm run build

执行以上命令后,下面是我的输出文件夹结构: dist
  • bundle.js
  • bundle.js.map
public
  • index.html
我查看了这些帖子(关于警告与bundle.js文件大小有关的尺寸链接),并根据建议进行了修改,但没有得到所需的结果。
下面是我的package.json供参考:
{
  "name": "react-starter",
  "version": "1.1.5",
  "description": "example",
  "main": "dist/bundle.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "webpack-dev-server --config ./webpack.dev.js",
    "build": "webpack --max_old_space_size=4096 --config ./webpack.prod.js --progress --profile --colors"
  },
  "homepage": ".",
  "keywords": [
    "react"
  ],
  "devDependencies": {
    "babel-cli": "^6.26.0",
    "babel-core": "^6.26.3",
    "babel-eslint": "^10.0.2",
    "babel-loader": "^7.1.5",
    "babel-plugin-transform-class-properties": "^6.24.1",
    "babel-plugin-transform-object-rest-spread": "^6.26.0",
    "babel-preset-env": "^1.7.0",
    "babel-preset-react": "^6.24.1",
    "clean-webpack-plugin": "^0.1.19",
    "css-loader": "^3.2.0",
    "dotenv": "^6.2.0",
    "eslint": "^5.16.0",
    "eslint-config-airbnb": "^17.1.0",
    "eslint-plugin-import": "^2.17.3",
    "eslint-plugin-jsx-a11y": "^6.2.1",
    "eslint-plugin-react": "^7.13.0",
    "eslint-plugin-react-hooks": "^1.6.0",
    "file-loader": "^1.1.11",
    "node-sass": "^4.12.0",
    "react": "^16.8.6",
    "react-dom": "^16.8.6",
    "sass-loader": "^7.1.0",
    "style-loader": "^0.21.0",
    "stylelint": "^9.10.1",
    "stylelint-config-standard": "^18.3.0",
    "uglifyjs-webpack-plugin": "^2.1.3",
    "webpack": "^4.34.0",
    "webpack-cli": "^3.3.4",
    "webpack-dev-server": "^3.7.1",
    "webpack-merge": "^4.1.4"
  },
  "dependencies": {
    "bootstrap": "^4.3.1",
    "i18next": "^16.0.0",
    "i18next-browser-languagedetector": "^3.0.1",
    "konva": "^2.5.1",
    "normalizr": "^3.4.0",
    "prop-types": "^15.7.2",
    "react-hot-loader": "^4.11.1",
    "react-i18next": "^10.11.1",
    "react-icons": "^3.7.0",
    "react-konva": "^16.8.6",
    "react-player": "^1.11.1",
    "react-scroll": "^1.7.12",
    "reactstrap": "^6.5.0"
  },
  "peerDependencies": {
    "react": "^16.8.6",
    "react-dom": "^16.8.6"
  }
}

以下是webpack.prod.js:

const path = require('path');
const merge = require('webpack-merge');
const CleanWebpackPlugin = require('clean-webpack-plugin');
const common = require('./webpack.common.js');

module.exports = merge(common, {
    entry: 'apps/index.js',
    mode: 'production',
    devtool: 'source-map',
    output: {
        path: path.resolve(__dirname, 'dist/'),
        publicPath: '/dist/',
        filename: 'bundle.js',
        libraryTarget: 'commonjs2',
    },
    plugins: [
        new CleanWebpackPlugin(['dist/*.*']),
    ],
    externals: {
        react: 'react',
        'react-dom': 'react-dom',
    },
});

我也注意到我正在集成的库中有一些被弃用的内容。我安装了缺失的对等依赖项,并在这里报告了该库的问题。
我认为要将其上传到S3,我们应该在dist或public文件夹中拥有所有必要的文件,以及index.html,该文件将作为S3中的前缀添加,从中获取应用程序的入口点。
如有任何帮助,将不胜感激。此外,我愿意提供任何额外的信息。

你能分享一下你的 webpack.prod.js 文件里面的内容吗?没有这些信息很难知道构建出了什么问题。 - JuanCaicedo
嗨@JuanCaicedo。感谢您查看我的帖子。请在上面编辑的描述中找到更新的webpack.prod.js文件。如果您需要任何其他信息,请告诉我。 - Santosh
你期望在“dist”目录中看到哪些文件?据我所知,只获取一个js文件是正确的行为(所有js文件都被合并成一个捆绑包)。是否还有其他缺失的文件? - JuanCaicedo
如果这是正确的行为,我想知道在S3上托管它作为静态网站时我错过了什么。当我将bundle.js和bundle.map.js添加到S3存储桶并使其公开可访问时,在尝试访问存储桶路径时,应该有一个入口点或根文件,从中加载应用程序,例如在angular中是index.html。同样,在reactjs中如何工作? - Santosh
2个回答

2

从你的package.json文件来看,似乎你没有使用create-react-app

我建议你简单地使用它创建一个新的React.js应用程序,并将你的应用程序内容复制到新创建的应用程序中。这很容易且有效。

希望这可以帮助你。


感谢您的建议@Daniele。在尝试您的建议时,我遇到了以下错误。 react-scripts start找不到所需的文件。 名称:index.js 在多个位置搜索后,我在这里提问。在样板代码中,index.js位于./src文件夹中。而在我的应用程序中,它在: src>apps>demo>index.js 感谢您对此的帮助。 - Santosh
如果问题只是文件路径的问题@Santosh,您可以将其移动到create-react-app期望找到它的位置。换句话说,您似乎正在“浪费”时间尝试解决一些已经被create-react-app解决的问题。如果您的目标是学习webpack,那么继续前进,您不是在浪费而是在投资您的时间。如果您的目标是拥有一个工作的react应用程序,我强烈建议您重新考虑您的工作。以我为例,我对webpack一无所知,但由于create-react-app,我能够在5分钟内运行(和构建)新的react应用程序。希望这可以帮助到您。 - Daniele Ricci

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接