将Webpack生产环境指向不同的API URL

3

我在我的angular 4项目中使用webpack。它指向同一URL的api。现在,对于生产环境,我有一个不同的API URL,那么我应该在哪里精确地放置新的URL?我正在使用jhipster项目。
来源:https://jhipster.github.io/using-angular/

webpack.prod.js:

const commonConfig = require('./webpack.common.js');
const webpackMerge = require('webpack-merge');
const CopyWebpackPlugin = require('copy-webpack-plugin');
const ExtractTextPlugin = require("extract-text-webpack-plugin");
const Visualizer = require('webpack-visualizer-plugin');
const path = require('path');
const ENV = 'prod';

module.exports = webpackMerge(commonConfig({ env: ENV }), {
    devtool: 'source-map',
    output: {
        path: path.resolve('./build/www'),
        filename: '[hash].[name].bundle.js',
        chunkFilename: '[hash].[id].chunk.js'
    },
    plugins: [
        new ExtractTextPlugin('[hash].styles.css'),
        new Visualizer({
            // Webpack statistics in target folder
            filename: '../stats.html'
        })
    ]
});

1
不确定这是否适合您,但您是否尝试将一个输出属性添加到您的 module.exports?output: { publicPath: '/' }, - peinearydevelopment
@Aravind,你能帮我继续吗? - Jeeten Parmar
@Aravind,请检查 Skype。 - Jeeten Parmar
@JeetenParmar,那个devserver的配置有帮到你吗? - alphapilgrim
@alphapilgrim,它在生产环境中不能正常工作。 - Jeeten Parmar
显示剩余6条评论
2个回答

0

文档V2。另外,您可能需要考虑向输出对象添加公共路径(这是值得探索的内容)。 您只需编辑主机文件以包含所需域名,然后将以下代码添加到webpack.config中:

devServer: {
  host: "localhost.specialurl.com",
  port: 1234,
  https: true
},



//webpack.production.config.js
var path = require('path');
var mainPath = path.resolve(__dirname, 'app', 'main.js');
var buildPath = path.resolve(__dirname, 'public', 'build');

entry: mainPath,
  output: {

    // Everything related to Webpack should go through a build path,
    // localhost:3000/build. That makes proxying easier to handle
    path: buildPath,
    filename: 'bundle.js'
  },

你能帮我继续前进吗? - Jeeten Parmar
只需将此内容复制粘贴到您的webpack配置中。将URL更改为您需要的URL。运行开发服务器。 - alphapilgrim
我的API服务器在生产环境中与开发环境不同,那么我该如何设置代理或目标?devServer在开发环境中可用,因此它可以正常工作,但我只在生产环境中遇到问题。 - Jeeten Parmar
@JeetenParmar,你正在使用哪个版本的Webpack? - alphapilgrim
据我所见,webpack中在webpack.dev中有一个proxy,因此它可以很好地与第三方API一起使用。我该如何在webpack.prod中设置proxy - Jeeten Parmar
显示剩余2条评论

0

我建议将您的依赖于环境的变量视为实际的环境变量,正如12因素应用程序方法中提到的第3条规则

这样,您就不会在代码中过度加载不断变化的环境内容,并且甚至可以直接从部署系统外轻松更新它们。

在node环境中,我个人更喜欢将这些变量存储到放置在项目根目录的专用.env文件中。

VAR_1=foo
VAR_2=bar

你可能会有不同的.xxx.env文件,针对每个环境或在构建之前以编程方式切换文件。

为了使声明的环境变量对你的代码可用,我建议使用webpack-dotenv-plugin

你将能够从应用程序中获取你的环境变量,就像标准节点用户环境变量一样:

const var1 = process.env.VAR_1;   // foo
const var2 = process.env.VAR_2;   // bar

我的API服务器在生产环境中与开发环境不同,那么我该如何设置代理或目标?在开发中有devServer,所以它能够正常工作,但我只在生产环境中存在问题。 - Jeeten Parmar
你想知道如何在生产环境中使用webpack dev server吗?请注意,这是可能的,但不被鼓励的做法。 - Andrea Carraro
根据我所见,webpack 在 webpack.dev 中有 proxy,因此可以很好地与第三方 API 协作。那么我该如何在 webpack.prod 中设置 proxy - Jeeten Parmar

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