如何使用 Webpack 打包到 'production' 我的 React 网站?
How to package to 'production' my react website with Webpack?
我设法使用这个 react-hot-boilerplate 配置脚本来创建和测试一个简单的 React Flux 网络应用程序。
现在我有了一个我喜欢的网站 运行 npm start
,在配置中添加生产版本的 easiest/best 方法是什么?当我使用 'package' 命令时,我想要一个 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
]
}
};
如果需要副本,我不确定要保留、更改(产品配置)或添加哪些部分...
您需要 运行 使用 --optimize-minimize
选项构建您的 Webpack(缩小)并确保 NODE_ENV
设置为 production
(这实际上是 disables/strips 输出 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,并且可以 "build" 通过 运行ning webpack
从命令行
你可能需要看看你的 webpack.config 我建议在这个样板之外了解 Webpack。 Egghead.io 有一些关于该主题(以及许多其他主题)的精彩短视频 :) egghead.io/search?q=Webpack,特别是 https://egghead.io/lessons/javascript-intro-to-webpack
我设法使用这个 react-hot-boilerplate 配置脚本来创建和测试一个简单的 React Flux 网络应用程序。
现在我有了一个我喜欢的网站 运行 npm start
,在配置中添加生产版本的 easiest/best 方法是什么?当我使用 'package' 命令时,我想要一个 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
]
}
};
如果需要副本,我不确定要保留、更改(产品配置)或添加哪些部分...
您需要 运行 使用 --optimize-minimize
选项构建您的 Webpack(缩小)并确保 NODE_ENV
设置为 production
(这实际上是 disables/strips 输出 React 的开发专用代码,例如 prop 类型检查)
您可以通过将 build:production
(您可以随意命名)命令添加到 package.json
,例如 NODE_ENV=production webpack --optimize-minimize
将此添加到您 package.json 的 scripts
"build:production": "NODE_ENV=production webpack --optimize-minimize"
和运行通过npm run build:production
注意:这是假设您已经正确配置了 Webpack,并且可以 "build" 通过 运行ning webpack
从命令行
你可能需要看看你的 webpack.config 我建议在这个样板之外了解 Webpack。 Egghead.io 有一些关于该主题(以及许多其他主题)的精彩短视频 :) egghead.io/search?q=Webpack,特别是 https://egghead.io/lessons/javascript-intro-to-webpack