代码之家  ›  专栏  ›  技术社区  ›  BaronGrivet

dev server与build中Vue.js+Webpack中的不同变量值

  •  2
  • BaronGrivet  · 技术社区  · 6 年前

    我正在从事一个Vue.js项目,该项目正在本地开发和维护中运行Webpack;构建用于部署的静态文件。

    有一个变量 apiDomain 需要从以下方面进行更改:

    http://localhost.api/ -本地发展

    https://api.example.com/ -在静态构建文件中

    我一直在尝试了解环境变量,但我不确定它们在Webpack vs Vue.js中是如何工作的。

    设置Vue.js变量以使其在本地开发和;静态构建文件?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Sombriks    6 年前

    您可以根据自己的需要调整此想法:

    import axios from "axios";
    
    const env = process.env.NODE_ENV || "development";
    
    console.log(`we are on [${env}] environment`);
    
    const addr = {
      production: "https://rosetta-beer-store.io",
      development: "http://127.0.0.1:3000",
    };
    
    const api = axios.create({
      headers: {"x-api-key": "my-api-key", "x-secret-key": ""},
      baseURL: addr[env],
    });
    
    export const beerservice = {
      list: params => api.get("/beer/list", {params}),
      find: id => api.get(`/beer/${id}`),
    };
    
    export const mediaservice = {
      url: id => (id ? `${addr[env]}/media/${id}` : `${addr[env]}/icon.svg`),
    };
    

    通过使用process.env.NODE_env(在开发和构建时可用),您不仅可以为应用程序服务端点设置正确的配置文件,还可以管理构建脚本上需要的任何调整:

    const path = require("path");
    
    const HtmlWebpackPlugin = require("html-webpack-plugin");
    const CleanWebpackPlugin = require("clean-webpack-plugin");
    
    const webpack = require("webpack");
    
    module.exports = {
      mode: process.env.NODE_ENV || "development",
      module: {
        rules: [
          {
            test: /\.css$/,
            use: ["style-loader", "css-loader"]
          },
          {
            test: /\.html$/,
            loader: "html-loader"
          },
          {
            test: /\.(png|svg|jpg|gif|woff|woff2|eot|ttf|otf)$/,
            use: ["file-loader"]
          },
          {
            test: /\.(js|jsx)$/,
            exclude: /node_modules/,
            use: ["babel-loader"]
          }
        ]
      },
      resolve: {
        extensions: ["*", ".js", ".jsx"]
      },
      entry: "./src/main.jsx",
      output: {
        filename: "build.js",
        path: path.resolve(__dirname, "dist")
      },
      devtool:
        process.env.NODE_ENV == "development" ? "inline-source-map" : undefined,
      devServer: {
        contentBase: "./dist",
        hot: true
      },
      plugins: [
        new CleanWebpackPlugin(["dist"]),
        new HtmlWebpackPlugin({
          template: "./index.html"
        }),
        new webpack.HotModuleReplacementPlugin()
      ]
    };
    

    this github project