Home > Web Front-end > JS Tutorial > body text

How to configure the Node project environment to support scalability?

青灯夜游
Release: 2021-11-02 09:03:16
forward
2786 people have browsed it

This article will introduce you to the configuration environment to make the Node project support scalable methods. I hope it will be helpful to everyone!

How to configure the Node project environment to support scalability?

Because there are few Node project developments that do not involve environment variable switching, but you will always encounter it when doing front-end project development. For example, you can configure .env in Vue projects. .xxx.xxx and requires the configuration of environment variables to start with VUE_APP_, Why? , let’s explore together how the environment variables of the Vue project are loaded and parsed, and then we will transplant them to the Node project. [Recommended learning: "nodejs Tutorial"]

Explore the loading of environment configuration in Vue:

Let's take a look firstVue CLI Regarding the description of modes and environment variables, we saw this paragraph: If you want to know the details of the rules for parsing environment files, please refer to dotenv. We also use dotenv-expand to implement variable expansion (Vue CLI 3.5 supports). We first use Vue Cli to create a Vue project.

Explore the first step:

By executing scripts in package.json The commands are all used @vue/cli-service package

How to configure the Node project environment to support scalability?

##Explore the second step:

@vue/cli-service package does install the two dependency packages prompted by the official website, and vue-cli-service in the bin directory. The key class Service was found in the js file.

How to configure the Node project environment to support scalability?

Explore the third step:

  • In

    Service# In ## we found the key function for loading environment configuration, the two path respectively refer to: .env.mode and .env.mode.local , that is, our environment variable file can support .local or not.

  • Think about the role of
  • load

    twice?

How to configure the Node project environment to support scalability?

Explore the third step:

    What happened to the specified prefix? We found the answer in the
  • util

    directory: resolveClientEnv.js, which is ultimately loaded into the global configuration by the DefinePlugin plug-in.

  • Thinking about the settings of
  • BASE_URL

    ?

How to configure the Node project environment to support scalability?

How to configure the Node project environment to support scalability?

Add environment configuration to the Node project carrying webpack

Prepare webpack project environment

Prepare webpack.config.js

How to configure the Node project environment to support scalability?

Add env-helper.js, let’s implement it together:

Install the necessary dependencies

npm install dotenv --save
npm install dotenv-expand --save
Copy after login

Parsing environment variable files

/**
 * 解析环境变量文件
 * @param {*} mode
 */
const loadEnv = (mode) => {
  const basePath = path.resolve(__dirname, `.env${mode ? `.${mode}` : ``}`);
  const localPath = `${basePath}.local`;

  const load = (envPath) => {
    try {
      const env = dotenv.config({ path: envPath, debug: process.env.DEBUG });
      dotenvExpand(env);
    } catch (err) {
      if (err.toString().indexOf("ENOENT") < 0) {
        console.error(err);
      }
    }
  };

  load(localPath);
  load(basePath);
};
Copy after login

Environment variable objects that match the prefix

After integrating the regular conditions and special ones Return, by injecting into the
DefinePlugin

plugin.

/**
 * 获取符合前缀规则的环境变量对象
 */
const prefixRE = /^XXTX_APP_/;
const resolveClientEnv = () => {
  const env = {};
  Object.keys(process.env).forEach((key) => {
    if (prefixRE.test(key) || key === "NODE_ENV") {
      env[key] = process.env[key];
    }
  });
  return env;
};
Copy after login

Upgrade webpack.config.js to demonstrate environment variable reading

Add demonstration plug-in and NODE_ENV configuration

const webpack = require("webpack");
const { loadEnv, resolveClientEnv } = require("./env-helper");
// 解析环境配置文件
// 通过cross-env 再scripts中配置NODE_ENV=development
loadEnv(process.env.NODE_ENV);
// 获取符合规则的环境配置对象
const env = resolveClientEnv();

const HelloWorldPlugin = require("./hello-world");

module.exports = {
  mode: "development",
  plugins: [
    new webpack.DefinePlugin(env),
    new HelloWorldPlugin({ options: true }),
  ],
};
Copy after login

Use environment variables in our webpack plugin

class HelloWorldPlugin {
  apply(compiler) {
    compiler.hooks.done.tap("HelloWorldPlugin", () => {
      console.log("Hello World!");
      console.log("[ XXTX_APP_NAME ] >", process.env.XXTX_APP_NAME);
      console.log("[ XXTX_APP_BASE_URL ] >", process.env.XXTX_APP_BASE_URL);
    });
  }
}

module.exports = HelloWorldPlugin;
Copy after login

View the output

How to configure the Node project environment to support scalability?

Ending note:

    We can transplant
  • env-helper.js

    to other NodeOnly the way to mount the configuration can be changed in the project.

  • This time the code relies entirely on the CV method. Have you learned it?

For more programming-related knowledge, please visit: Programming Teaching! !

The above is the detailed content of How to configure the Node project environment to support scalability?. For more information, please follow other related articles on the PHP Chinese website!

Related labels:
source:juejin.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!