【问题标题】:How to build everything into a dist with folder structure by webpack?如何通过 webpack 将所有内容构建到具有文件夹结构的 dist 中?
【发布时间】:2018-02-11 06:18:17
【问题描述】:

我是一名多年的 Java 开发人员,刚刚接触 js 世界。这个问题听起来很愚蠢,但我不知道为 reactjs 应用程序构建 dist 以部署到生产(nginx/apache)的正确/最佳方法是什么。

据我了解,dist 就像简单的网络应用程序一样,应该看起来像 包含:

  • index.html
  • client.js(编译后打包的js)
  • 静态文件,例如 图片、css、js库等

我遵循以下指南:

它使用 webpack 打包 client.js.min 并通过节点部署到嵌入式 Web 服务器(也许我错了)。

问题: 如何通过命令构建所有东西,比如“npm run build”,它应该在一个名为“dist”的文件夹中构建所有东西。所以我可以通过将每个 in dist 复制到 web 根目录来将它部署到 web 服务器根目录。

package.json

 {
      "name": "react-tutorials",
      "version": "0.0.0",
      "description": "",
      "main": "webpack.config.js",
      "dependencies": {
        "babel-core": "^6.17.0",
        "babel-loader": "^6.2.0",
        "babel-plugin-add-module-exports": "^0.1.2",
        "babel-plugin-react-html-attrs": "^2.0.0",
        "babel-plugin-transform-class-properties": "^6.3.13",
        "babel-plugin-transform-decorators-legacy": "^1.3.4",
        "babel-preset-es2015": "^6.3.13",
        "babel-preset-react": "^6.3.13",
        "babel-preset-stage-0": "^6.3.13",
        "react": "^0.14.6",
        "react-dom": "^0.14.6",
        "webpack": "^1.12.9",
        "webpack-dev-server": "^1.14.1"
      },
      "devDependencies": {},
      "scripts": {
        "dev": "webpack-dev-server --content-base src --inline --hot",
        "test": "echo \"Error: no test specified\" && exit 1"
      },
      "author": "",
      "license": "ISC"
    }

webpack.config.js

var debug = process.env.NODE_ENV !== "production";
var webpack = require('webpack');
var path = require('path');

module.exports = {
  context: path.join(__dirname, "src"),
  devtool: debug ? "inline-sourcemap" : false,
  entry: "./js/client.js",
  module: {
    loaders: [
      {
        test: /\.jsx?$/,
        exclude: /(node_modules|bower_components)/,
        loader: 'babel-loader',
        query: {
          presets: ['react', 'es2015', 'stage-0'],
          plugins: ['react-html-attrs', 'transform-decorators-legacy', 'transform-class-properties'],
        }
      }
    ]
  },
  output: {
    path: __dirname + "/src/",
    filename: "client.min.js"
  },
  plugins: debug ? [] : [
    new webpack.optimize.DedupePlugin(),
    new webpack.optimize.OccurrenceOrderPlugin(),
    new webpack.optimize.UglifyJsPlugin({ mangle: false, sourcemap: false }),
  ],
};

【问题讨论】:

    标签: apache reactjs webpack build


    【解决方案1】:

    在您的 package.json 脚本字典中添加以下内容

    "build" : "NODE_ENV='production' && node_modules/.bin/webpack -p"
    

    这将告诉 webpack 读取配置文件并在生产模式下构建它,即缩小等。 -p 标志可以做到这一点。 node env 是为了确保生产构建用于 react 和其他库,并为 NODE_Env 设置生产环境变量

    运行类型。 npm run build

    【讨论】:

    • 我刚试过,它为我构建了一个“client.min.js”,但它没有在项目根目录上创建新的任何新文件夹。我仍然需要自己将必要的文件复制到 /dist。
    • Aah 在你的 webpack 配置中有一个输出对象。将路径字段编辑到要转储构建的任何位置。在你的情况下。
    • 谢谢,现在可以了,但我只能复制一个文件“client.min.js”。如何对多个文件执行此操作,例如*/.(html|js|css) 与文件夹结构?
    • 所以 webpack 的整个概念是将你的整个 css js 图像等捆绑到 1 个捆绑包中,该捆绑包被吐出到输出文件夹路径中。如果您想将 css 从 js 包中分离出来,您将不得不使用提取文本插件。据我所知,webpack 每个配置只允许一个输出路径,但您可以根据此链接 stackoverflow.com/questions/35903246/… 调整配置文件以获得您想要的
    • 我已经阅读了文档,但我不太了解这个概念。在我的示例中,完整分发(或部署到另一个 Web 服务器)至少需要两个文件(index.html 和 client.min.js)。将 index.html 捆绑到 js 中听起来没有意义。我说的对吗?
    猜你喜欢
    • 1970-01-01
    • 2018-12-04
    • 1970-01-01
    • 1970-01-01
    • 2017-11-10
    • 2021-03-15
    • 1970-01-01
    • 2021-09-18
    • 2019-08-10
    相关资源
    最近更新 更多