使用 Webpack 将 React 应用程序投入生产
Putting React app into production with Webpack
这里是 React 新手。我即将完成我的第一个 React 应用程序,但 运行 在将其投入生产时遇到问题
目前,我正在尝试 运行
NODE_ENV=production webpack -p
我的 package.json 文件中有一个脚本。
一切 运行 都没有问题,但脚本似乎没有输出正确的生产 index.html 文件。例如,所有 JS 和 CSS 文件的末尾都有一个问号和随机字符,如下所示
href="/css/app.css?287deee1465dba65696e"
此外,生产 index.html 文件似乎只有 /src/index.html 中的内容,它位于我的开发环境中,但是我希望它是 /src/App.js 中的内容,其中编写了我的代码的内容。
我一定有什么地方不对,但由于我对 Webpack 和 React 都很陌生,所以我不确定从哪里开始看。下面是我的 index.js、index.html 和我的 webpack.config.js 的一部分,其中涉及将代码投入生产。
index.js
//const css = require('./app.scss');
const css = require('./style/style.scss');
import React from 'react';
import ReactDOM from 'react-dom';
import anime from 'animejs';
import {App} from './App.js';
ReactDOM.render(
<App />,
document.getElementById('root')
);
index.html(src)
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title><%= htmlWebpackPlugin.options.title %></title>
</head>
<body >
<div id="root">
<h1>Webpack</h1>
</div>
</body>
</html>
webpack.config.js
var isProd = process.env.NODE_ENV === 'production'; //true or false
var cssDev = ['style-loader', 'css-loader', 'sass-loader'];
var cssProd = ExtractTextPlugin.extract({
fallback: 'style-loader',
use: ['css-loader','sass-loader'],
publicPath: '/dist'
})
var cssConfig = isProd ? cssProd : cssDev;
module.exports = {
entry:{
app: './src/index.js',
slideshow: './src/js/slideshow.js',
shapallax: './src/js/shapallax.js',
yona: './src/js/yona.js',
},
output: {
path: path.resolve(__dirname, "dist"),
// path: __dirname + '/dist',
filename: '[name].bundle.js'
},
我确定我遗漏了一些对解决此问题很有用的细节,所以请告诉我要查找和询问的正确内容。
我设法找出了相当简单的问题。在我的 webpack.config.js 中,我不得不在 ExtractTextPlugin 设置中更改 filename。删除路径开头的正斜杠后,我能够在 /dist 文件夹中正确输出所有内容。最终的工作设置如下所示。
new ExtractTextPlugin({
filename: 'css/[name].css',
disable: !isProd,
allChunks:true
}),
这里是 React 新手。我即将完成我的第一个 React 应用程序,但 运行 在将其投入生产时遇到问题
目前,我正在尝试 运行
NODE_ENV=production webpack -p
我的 package.json 文件中有一个脚本。
一切 运行 都没有问题,但脚本似乎没有输出正确的生产 index.html 文件。例如,所有 JS 和 CSS 文件的末尾都有一个问号和随机字符,如下所示
href="/css/app.css?287deee1465dba65696e"
此外,生产 index.html 文件似乎只有 /src/index.html 中的内容,它位于我的开发环境中,但是我希望它是 /src/App.js 中的内容,其中编写了我的代码的内容。
我一定有什么地方不对,但由于我对 Webpack 和 React 都很陌生,所以我不确定从哪里开始看。下面是我的 index.js、index.html 和我的 webpack.config.js 的一部分,其中涉及将代码投入生产。 index.js
//const css = require('./app.scss');
const css = require('./style/style.scss');
import React from 'react';
import ReactDOM from 'react-dom';
import anime from 'animejs';
import {App} from './App.js';
ReactDOM.render(
<App />,
document.getElementById('root')
);
index.html(src)
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title><%= htmlWebpackPlugin.options.title %></title>
</head>
<body >
<div id="root">
<h1>Webpack</h1>
</div>
</body>
</html>
webpack.config.js
var isProd = process.env.NODE_ENV === 'production'; //true or false
var cssDev = ['style-loader', 'css-loader', 'sass-loader'];
var cssProd = ExtractTextPlugin.extract({
fallback: 'style-loader',
use: ['css-loader','sass-loader'],
publicPath: '/dist'
})
var cssConfig = isProd ? cssProd : cssDev;
module.exports = {
entry:{
app: './src/index.js',
slideshow: './src/js/slideshow.js',
shapallax: './src/js/shapallax.js',
yona: './src/js/yona.js',
},
output: {
path: path.resolve(__dirname, "dist"),
// path: __dirname + '/dist',
filename: '[name].bundle.js'
},
我确定我遗漏了一些对解决此问题很有用的细节,所以请告诉我要查找和询问的正确内容。
我设法找出了相当简单的问题。在我的 webpack.config.js 中,我不得不在 ExtractTextPlugin 设置中更改 filename。删除路径开头的正斜杠后,我能够在 /dist 文件夹中正确输出所有内容。最终的工作设置如下所示。
new ExtractTextPlugin({
filename: 'css/[name].css',
disable: !isProd,
allChunks:true
}),