const { readFileSync, accessSync, constants } = require('fs') const { join } = require('path') const { parse } = require('dotenv') const logger = require('./logger') module.exports = function (moduleOptions) { const options = { only: null, path: this.options.srcDir, filename: '.env', systemvars: false, ...this.options.dotenv, ...moduleOptions } const envFilePath = join(options.path, options.filename) try { accessSync(envFilePath, constants.R_OK) } catch (err) { logger.warn(`No \`${options.filename}\` file found in \`${options.path}\`.`) return } const envConfig = parse(readFileSync(envFilePath)) if (options.systemvars) { Object.keys(process.env).map((key) => { if (!(key in envConfig)) { envConfig[key] = process.env[key] } }) } Object.keys(envConfig).forEach((key) => { if (!Array.isArray(options.only) || options.only.includes(key)) { this.options.env[key] = this.options.env[key] || envConfig[key] } }) } module.exports.meta = require('../package.json')