如何使用NGINX在生产环境中提供Webpack构建文件

7
我写了一个vue + webpack项目,在webpack-dev-middleware中运行良好。现在我想使用nginx进行部署。我做的是编写一个webpack.build.config.js文件并将所有文件捆绑到一个dist文件夹中。然后我只需将dist文件夹复制到nginx html文件夹中,并在nginx.conf中指定索引。但是,它报错了:

[Vue warn]: Failed to mount component: template or render function not defined. (found in root instance)

我是个新手,对devops/backend非常困惑,整个构建或部署过程也很迷惑。在生产环境中,是否仍需要webpack-dev-server 或 nodejs?我的生产环境后端是nginx/PHP和IIS/.Net,现在根本没有安装node。
我的nginx.conf如下:
location / {
    root   html/dist;
    index  index.html index.htm;
}

而 webpack.build.config.js 是

var path = require('path');
var webpack = require('webpack');
var HtmlWebpackPlugin = require('html-webpack-plugin');
var public_dir = "components";
//var ModernizrWebpackPlugin = require('modernizr-webpack-plugin');

module.exports = {
    entry: [
        path.join(__dirname,'./index.js')
    ],
    output: {
        path: path.join(__dirname, '/dist/'),
        filename: '[name].js',
        publicPath: '/'
    },
    devtool: 'eval-source-map',
    plugins: [
        new webpack.optimize.CommonsChunkPlugin('common.js'),
        new webpack.optimize.DedupePlugin(),
        new webpack.optimize.UglifyJsPlugin(),
        new webpack.optimize.AggressiveMergingPlugin(),
        new HtmlWebpackPlugin({
            filename: 'index.html',
            template: path.resolve(__dirname, 'index.html'),
            inject: true
        })
    ],
    resolve: {
        root: [path.resolve('./components')],
        extensions: ['', '.js', '.css']
    },
    module: {
        loaders: [
        ]
    }
};

运行构建时,执行以下命令:
webpack -p --config ./webpack.build.config.js。该命令将使用指定的配置文件进行生产环境打包。

对于同一个案例,我使用nginx作为代理,而pm2(http://pm2.keymetrics.io/)管理nodejs服务器进程。 - ArkadyB
@ArkadyB 请进一步详细说明您如何使用pm2。例如,您使用哪个命令来部署到生产环境? - NIMROD MAINA
根据PM2网站上的说明,@NIMRODMAINA是用于Node.js应用程序的生产过程管理器,因此您可以使用任何工具构建应用程序 - 如webpack等,并使用pm2在后台运行您的应用程序。请参阅官方网站以获取更多信息 - http://pm2.keymetrics.io/。 - ArkadyB
@ArkadyB,非常抱歉,我对此还很陌生。请原谅我这个初学者的问题。命令是 pm2 start webpack.build.config.js 还是我需要指向 build.js 文件? - NIMROD MAINA
@NIMRODMAINA,我所做的只是运行“pm2 start app.js”,其中app.js是您的Node.js应用程序。自那时以来,它们似乎有了很大的改进,现在支持更多的自动部署功能。请查看他们的文档。 - ArkadyB
1个回答

0

我正在使用vue-cli来初始化VueJS Webpack项目。该项目已经有了构建脚本,您可以参考它:

require('./check-versions')()

process.env.NODE_ENV = 'production'

var ora = require('ora')
var rm = require('rimraf')
var path = require('path')
var chalk = require('chalk')
var webpack = require('webpack')
var config = require('../config')
var webpackConfig = require('./webpack.prod.conf')

var spinner = ora('building for production...')
spinner.start()

rm(path.join(config.build.assetsRoot, config.build.assetsSubDirectory), err => {
  if (err) throw err
  webpack(webpackConfig, function (err, stats) {
    spinner.stop()
    if (err) throw err
    process.stdout.write(stats.toString({
      colors: true,
      modules: false,
      children: false,
      chunks: false,
      chunkModules: false
    }) + '\n\n')

    console.log(chalk.cyan('  Build complete.\n'))
    console.log(chalk.yellow(
      '  Tip: built files are meant to be served over an HTTP server.\n' +
      '  Opening index.html over file:// won\'t work.\n'
    ))
  })
})

构建完成后,我们将拥有一个名为dist的文件夹。将其内部所有文件上传到Nginx(默认)的html文件夹中。 配置根路径以使用完整路径如下:
listen      80;
server_name mydomain www.mydomain;
root /var/www/html;

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