Различное значение переменной в Vue.js + Webpack в dev server vs build - PullRequest
0 голосов
/ 08 февраля 2019

Я работаю над проектом Vue.js, который запускает Webpack в локальной разработке и создает статические файлы для развертывания.

Существует переменная apiDomain, которую необходимо изменить с:

http://localhost.api/ - в локальной разработке

до

https://api.example.com/ - в файлах статической сборки

Я пытался разобраться с переменными среды, ноЯ не уверен, как они работают в Webpack против Vue.js.

Как правильно настроить переменную Vue.js, чтобы она отличалась между локальной разработкой и файлами статической сборки?

1 Ответ

0 голосов
/ 08 февраля 2019

Вы можете адаптировать эту идею для своих нужд:

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()
  ]
};

Вы можете увидеть больше примеров на этом проекте github , но общая идея заключается в том, чтобы воспользоваться узлом навремя сборки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...