Skip to content

Commit

Permalink
refactor: update module (#34)
Browse files Browse the repository at this point in the history
BREAKING CHANGES:

- Upgrade `dotenv` to v8.0.0
- Change `only` options to `nul`
  • Loading branch information
ricardogobbosouza authored and JulienTant committed Aug 5, 2019
1 parent 6056e24 commit 898fe3a
Show file tree
Hide file tree
Showing 45 changed files with 6,145 additions and 19,179 deletions.
26 changes: 14 additions & 12 deletions .circleci/config.yml
Original file line number Diff line number Diff line change
@@ -1,16 +1,15 @@
version: 2
jobs:
build:
working_directory: /usr/src/app
docker:
- image: banian/node
- image: circleci/node
steps:
# Checkout repository
- checkout

# Restore cache
- restore_cache:
key: yarn-{{ checksum "yarn.lock" }}
key: yarn-cache-{{ checksum "yarn.lock" }}

# Install dependencies
- run:
Expand All @@ -19,18 +18,21 @@ jobs:

# Keep cache
- save_cache:
key: yarn-{{ checksum "yarn.lock" }}
key: yarn-cache-{{ checksum "yarn.lock" }}
paths:
- "node_modules"

# Build
# - run:
# name: Build
# command: |
# mkdir -p dist
# yarn build
# Lint
- run:
name: Lint
command: yarn lint

# Test
# Tests
- run:
name: Tests
command: yarn test && yarn codecov
command: yarn jest

# Coverage
- run:
name: Coverage
command: yarn codecov
8 changes: 8 additions & 0 deletions .eslintignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
# Common
node_modules
dist
.nuxt
coverage

# Plugin
lib/plugin.js
6 changes: 5 additions & 1 deletion .eslintrc.js
Original file line number Diff line number Diff line change
@@ -1 +1,5 @@
module.exports = require('nuxt-module-builder/eslint')
module.exports = {
extends: [
'@nuxtjs'
]
}
4 changes: 2 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,6 @@ node_modules
*.log*
.nuxt
.vscode
.DS_STORE
.DS_Store
coverage
dist
dist
2 changes: 1 addition & 1 deletion LICENSE
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
MIT License

Copyright (c) Julien Tant <[email protected]>
Copyright (c) Nuxt Community

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
Expand Down
107 changes: 78 additions & 29 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,25 +1,28 @@
# @nuxtjs/dotenv module
# @nuxtjs/dotenv

[![npm (scoped with tag)](https://img.shields.io/npm/v/@nuxtjs/dotenv/latest.svg?style=flat-square)](https://npmjs.com/package/@nuxtjs/dotenv)
[![npm](https://img.shields.io/npm/dt/@nuxtjs/dotenv.svg?style=flat-square)](https://npmjs.com/package/@nuxtjs/dotenv)
[![CircleCI](https://img.shields.io/circleci/project/github/nuxt-community/dotenv-module.svg?style=flat-square)](https://circleci.com/gh/nuxt-community/dotenv-module)
[![Codecov](https://img.shields.io/codecov/c/github/nuxt-community/dotenv-module.svg?style=flat-square)](https://codecov.io/gh/nuxt-community/dotenv-module)
[![Dependencies](https://david-dm.org/nuxt-community/dotenv-module/status.svg?style=flat-square)](https://david-dm.org/nuxt-community/dotenv-module)


[![js-standard-style](https://cdn.rawgit.com/standard/standard/master/badge.svg)](http://standardjs.com)
[![npm version][npm-version-src]][npm-version-href]
[![npm downloads][npm-downloads-src]][npm-downloads-href]
[![Circle CI][circle-ci-src]][circle-ci-href]
[![Codecov][codecov-src]][codecov-href]
[![License][license-src]][license-href]

> A nuxt.js module that loads your .env file into your context options
[📖 **Release Notes**](./CHANGELOG.md)

## Features

The module loads variables from your .env file directly into your nuxt.js application `context` and `process.env`.
The module loads variables from your .env file directly into your nuxt.js application `context` and `process.env`.

## Setup
- Add `@nuxtjs/dotenv` dependency using yarn or npm to your project
- Add `@nuxtjs/dotenv` to `modules` section of `nuxt.config.js`

1. Add `@nuxtjs/dotenv` dependency to your project

```bash
yarn add @nuxtjs/dotenv # or npm install @nuxtjs/dotenv
```

2. Add `@nuxtjs/dotenv` to the `modules` section of `nuxt.config.js`

```js
{
Expand All @@ -28,88 +31,134 @@ The module loads variables from your .env file directly into your nuxt.js applic
'@nuxtjs/dotenv',

// With options
['@nuxtjs/dotenv', { /* module options */ }],
]
['@nuxtjs/dotenv', { /* module options */ }]
]
}
```

## Usage
### Using top level options

After creating your .env file in the project root, simply run your usual `npm run dev`. The variable inside the .env file will be added to the context (`context.env`) and process (`process.env`)
```js
{
modules: [
'@nuxtjs/dotenv'
],
dotenv: {
/* module options */
}
}
```

## Options

### only
### `only`

- Default: `null`

If you want to restrict what's accessible into the context, you can can pass to the module options an `only` array with the keys you want to allow.

```js
{
modules: [
['@nuxtjs/dotenv', { only: ['some_key'] }],
['@nuxtjs/dotenv', { only: ['some_key'] }]
]
}
```

### path
### `path`

- Default: `srcDir`

By default, the we'll be loading the `.env` file from the root of your project. If you want to change the path of the folder where we can find the `.env` file, then use the `path` option.

```js
{
modules: [
['@nuxtjs/dotenv', { path: '/path/to/my/global/env/' }],
['@nuxtjs/dotenv', { path: '/path/to/my/global/env/' }]
]
}
```

Note that this is the path to the **folder** where the `.env` file live, not to the `.env` file itself.
> **Note:** that this is the path to the *folder* where the `.env` file live, not to the `.env` file itself.
The path can be absolute or relative.

### systemvars

By default this is false and variables from your system will be ignored. Setting this to true will allow your system set variables to work.
- Default: `false`

By default this is false and variables from your system will be ignored.
Setting this to true will allow your system set variables to work.

```js
{
modules: [
['@nuxtjs/dotenv', { systemvars: true }],
['@nuxtjs/dotenv', { systemvars: true }]
]
}
```

### filename

- Default: `.env`

We can override the filename when we need to use different config files for different environments.

```js
{
modules: [
['@nuxtjs/dotenv', { filename: '.env.prod' }],
['@nuxtjs/dotenv', { filename: '.env.prod' }]
]
}
```

## Usage

After creating your .env file in the project root, simply run your usual `yarn dev` or `npm run dev`.
The variable inside the .env file will be added to the context (`context.env`) and process (`process.env`)

## Using .env file in nuxt.config.js

The `dotenv-module` won't overload the environment variables of the process running your build.
This module won't overload the environment variables of the process running your build.

If you need to use variables from your .env file at this moment, just append `require('dotenv').config()` to your `nuxt.config.js` :
If you need to use variables from your .env file at this moment,
just append `require('dotenv').config()` to your `nuxt.config.js` :

```js
require('dotenv').config()

module.exports = {
// your usual nuxt config.
// your usual nuxt config.
}
```

This will works thanks to the `dotenv` library provided by this module as a dependency. If you decided to ignore some values from your `.env` file in the module configuration, this won't apply here.
This will works thanks to the `dotenv` library provided by this module as a dependency.
If you decided to ignore some values from your `.env` file in the module configuration, this won't apply here.

## Development

1. Clone this repository
2. Install dependencies using `yarn install` or `npm install`
3. Start development server using `npm run dev`

## License

[MIT License](./LICENSE)

Copyright (c) Julien Tant <[email protected]>
Copyright (c) Nuxt Community

<!-- Badges -->
[npm-version-src]: https://img.shields.io/npm/v/@nuxtjs/dotenv/latest.svg?style=flat-square
[npm-version-href]: https://npmjs.com/package/@nuxtjs/dotenv

[npm-downloads-src]: https://img.shields.io/npm/dt/@nuxtjs/dotenv.svg?style=flat-square
[npm-downloads-href]: https://npmjs.com/package/@nuxtjs/dotenv

[circle-ci-src]: https://img.shields.io/circleci/project/github/nuxt-community/dotenv-module.svg?style=flat-square
[circle-ci-href]: https://circleci.com/gh/nuxt-community/dotenv-module

[codecov-src]: https://img.shields.io/codecov/c/github/nuxt-community/dotenv-module.svg?style=flat-square
[codecov-href]: https://codecov.io/gh/nuxt-community/dotenv-module

[license-src]: https://img.shields.io/npm/l/@nuxtjs/dotenv.svg?style=flat-square
[license-href]: https://npmjs.com/package/@nuxtjs/dotenv
5 changes: 5 additions & 0 deletions commitlint.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
module.exports = {
extends: [
'@commitlint/config-conventional'
]
}
7 changes: 7 additions & 0 deletions husky.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
module.exports = {
hooks: {
'commit-msg': 'commitlint -E HUSKY_GIT_PARAMS',
'pre-commit': 'yarn lint',
'pre-push': 'yarn lint'
}
}
8 changes: 8 additions & 0 deletions jest.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
module.exports = {
testEnvironment: 'node',
collectCoverage: true,
collectCoverageFrom: [
'lib/**/*.js',
'!lib/plugin.js'
]
}
3 changes: 3 additions & 0 deletions lib/logger.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
const consola = require('consola')

module.exports = consola.withScope('nuxt:dotenv')
42 changes: 42 additions & 0 deletions lib/module.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
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')
Loading

0 comments on commit 898fe3a

Please sign in to comment.