【问题标题】:How to package to 'production' my react website with Webpack?如何使用 Webpack 打包到“生产”我的反应网站?
【发布时间】:2016-04-06 02:57:42
【问题描述】:

我设法使用这个 react-hot-boilerplate 配置脚本来创建和测试一个简单的 React Flux webapp。

现在我有一个运行 npm start 时喜欢的网站,那么在配置中添加生产构建的最简单/最好的方法是什么?当我使用该“包”命令时,我想获得一个小prod 文件夹,其中包含我需要的所有最终 html 和缩小的 js 文件,这是我应该期待的吗?

这是我的 package.json

{
  "name": "react-hot-boilerplate",
  "version": "1.0.0",
  "description": "Boilerplate for ReactJS project with hot code reloading",
  "scripts": {
    "start": "node server.js",
    "lint": "eslint src"
  },
  "author": "Dan Abramov <dan.abramov@me.com> (http://github.com/gaearon)",
  "license": "MIT",
  "bugs": {
    "url": "https://github.com/gaearon/react-hot-boilerplate/issues"
  },
  "homepage": "https://github.com/gaearon/react-hot-boilerplate",
  "devDependencies": {
    "babel-core": "^5.4.7",
    "babel-eslint": "^3.1.9",
    "babel-loader": "^5.1.2",
    "eslint-plugin-react": "^2.3.0",
    "react-hot-loader": "^1.2.7",
    "webpack": "^1.9.6",
    "webpack-dev-server": "^1.8.2"
  },
  "dependencies": {
    "react": "^0.13.0",
    "flux": "^2.0.2",
    "events": "^1.0.2",
    "object-assign": "^3.0.0",
    "jquery": "^2.1.4",
    "imports-loader": "^0.6.4",
    "url-loader": "^0.5.6",
    "numeral": "^1.5.3",
    "bootstrap": "^3.3.5",
    "d3": "^3.5.6",
    "zeroclipboard": "^2.2.0",
    "react-toastr": "^1.5.1",
    "d3-legend": "^1.0.0"
  }
}

我想我想在脚本列表中添加一个新脚本,这样我就可以使用一个新的npm xyz 命令,但我不确定在那里写什么。


还有我的 Webpack.config.js,以防我可能(?)必须为产品配置使用类似但不同的副本:

  var path = require('path');
  var webpack = require('webpack');

  module.exports = {
    devtool: 'eval',
    entry: [
      'webpack-dev-server/client?http://localhost:3000',
      'webpack/hot/only-dev-server',
      './src/index'
    ],
    output: {
      path: path.join(__dirname, 'dist'),
      filename: 'bundle.js',
      publicPath: '/static/'
    },
    plugins: [
      new webpack.HotModuleReplacementPlugin(),
      new webpack.NoErrorsPlugin(),
      new webpack.ProvidePlugin({ $: "jquery", jQuery: "jquery" })
    ],
    externales: { "jquery": "jQuery", "$": 'jQuery' },
    resolve: {
      extensions: ['', '.js', '.jsx']
    },
    module: {
      loaders: [
        {
          test: /\.jsx?$/,
          loaders: ['react-hot', 'babel'],
          include: path.join(__dirname, 'src')
        },
        { test: /\.less$/, loader: 'style-loader!css-loader!less-loader' }, // use ! to chain loaders
        { test: /\.css$/, loader: 'style-loader!css-loader' },
        {test: /\.(png|jpg|gif)$/, loader: 'url-loader?limit=8192'} // inline base64 URLs for <=8k images, direct URLs for the rest
      ]
    }
  };

如果需要副本,我不确定要保留、更改(产品配置)或添加哪些部分...

【问题讨论】:

    标签: javascript reactjs npm webpack packaging


    【解决方案1】:

    您需要使用 --optimize-minimize 选项(缩小)运行您的 Webpack 构建,并确保将 NODE_ENV 设置为 production(这有效地禁用/去除了 React 仅用于开发的代码,例如 prop 类型检查)

    您可以通过将build:production(您可以随意命名)命令添加到package.json(例如NODE_ENV=production webpack --optimize-minimize)作为npm 命令来完成此操作

    将此添加到您的 package.json 的 scripts

    "build:production": "NODE_ENV=production webpack --optimize-minimize"
    

    然后通过npm run build:production运行命令

    注意:这是假设你已经正确配置了 Webpack 并且可以通过从命令行运行 webpack 来“构建”

    您可能需要查看您的 webpack.config,我建议您在此样板文件之外了解 Webpack。 Egghead.io 有一些关于该主题(以及许多其他主题)的精彩短视频 :) egghead.io/search?q=Webpack,特别是 https://egghead.io/lessons/javascript-intro-to-webpack

    【讨论】:

    • 谢谢,我在其他地方读到webpack -p 用于构建生产(缩小),这与--optimize-minimize 有什么不同吗?
    • 是的 -p--minimize-optimize 的别名 :)
    • 还有,为什么要使用npm run build:production?我已经让npm start 脚本工作了,它不需要运行?谢谢!
    • 这是 npm 的一个特性。 teststart 脚本不需要 run,但您添加的任何自定义 scripts 都需要它。
    • 谢谢 :) 我是否可能需要调用 Webpack 并指定一个新的配置文件? "build:prod": "NODE_ENV=production webpack --optimize-minimize --config webpack.prod.config.js" 另外,我在问题中添加了我的webpack.config.js,如果这有帮助,但我不太明白:S 我猜魔法就在output 部分
    猜你喜欢
    • 1970-01-01
    • 2017-03-20
    • 2018-03-11
    • 1970-01-01
    • 2020-03-18
    • 1970-01-01
    • 1970-01-01
    • 2019-12-19
    • 1970-01-01
    相关资源
    最近更新 更多