diff --git a/node_modules/create-require/CHANGELOG.md b/node_modules/create-require/CHANGELOG.md
new file mode 100644
index 0000000..952deea
--- /dev/null
+++ b/node_modules/create-require/CHANGELOG.md
@@ -0,0 +1,33 @@
+# Changelog
+
+All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
+
+### [1.1.1](https://github.com/nuxt-contrib/create-require/compare/v1.1.0...v1.1.1) (2020-11-26)
+
+
+### Bug Fixes
+
+* **types:** explicitly import the URL type ([#3](https://github.com/nuxt-contrib/create-require/issues/3)) ([66a98cc](https://github.com/nuxt-contrib/create-require/commit/66a98cc60a430c3689f11ad111c5fbf4574a37b6))
+
+## [1.1.0](https://github.com/nuxt-contrib/create-require/compare/v1.0.2...v1.1.0) (2020-11-21)
+
+
+### Features
+
+* fallback to process.cwd() if no filename provided either ([ae5e0d6](https://github.com/nuxt-contrib/create-require/commit/ae5e0d665945b980b82ae6e998146c32295a6734))
+
+### [1.0.2](https://github.com/nuxt-contrib/create-require/compare/v1.0.1...v1.0.2) (2020-06-12)
+
+
+### Bug Fixes
+
+* use fake path if filename is directory ([c8e0983](https://github.com/nuxt-contrib/create-require/commit/c8e09834e322d8a106ac8018011f799e2fed03f2))
+
+### [1.0.1](https://github.com/nuxt-contrib/create-require/compare/v1.0.0...v1.0.1) (2020-06-06)
+
+
+### Bug Fixes
+
+* **types:** specify types field ([2c06464](https://github.com/nuxt-contrib/create-require/commit/2c0646407704c1c534babdfed39a48f51fc4f616))
+
+### 0.0.1 (2020-05-04)
diff --git a/node_modules/create-require/LICENSE b/node_modules/create-require/LICENSE
new file mode 100644
index 0000000..494a93c
--- /dev/null
+++ b/node_modules/create-require/LICENSE
@@ -0,0 +1,25 @@
+MIT License
+
+Copyright (c) 2020
+
+Maël Nison <nison.mael@gmail.com>
+Paul Soporan <paul.soporan@gmail.com>
+Pooya Parsa <pyapar@gmail.com>
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/node_modules/create-require/README.md b/node_modules/create-require/README.md
new file mode 100644
index 0000000..10041da
--- /dev/null
+++ b/node_modules/create-require/README.md
@@ -0,0 +1,46 @@
+# `create-require`
+
+[![npm version][npm-version-src]][npm-version-href]
+[![npm downloads][npm-downloads-src]][npm-downloads-href]
+[![Github Actions][github-actions-src]][github-actions-href]
+[![Codecov][codecov-src]][codecov-href]
+
+Polyfill for Node.js [`module.createRequire`](https://nodejs.org/api/modules.html#modules_module_createrequire_filename) (<= v12.2.0)
+
+## Install
+
+```sh
+yarn add create-require
+
+npm install create-require
+```
+
+## Usage
+
+```ts
+function createRequire (filename: string | URL): NodeRequire;
+```
+
+```js
+const createRequire = require('create-require')
+
+const myRequire = createRequire('path/to/test.js')
+const myModule = myRequire('./test-sibling-module')
+```
+
+## License
+
+[MIT](./LICENSE)
+
+<!-- Badges -->
+[npm-version-src]: https://img.shields.io/npm/v/create-require?style=flat-square
+[npm-version-href]: https://npmjs.com/package/create-require
+
+[npm-downloads-src]: https://img.shields.io/npm/dm/create-require?style=flat-square
+[npm-downloads-href]: https://npmjs.com/package/create-require
+
+[github-actions-src]: https://img.shields.io/github/workflow/status/nuxt-contrib/create-require/test/master?style=flat-square
+[github-actions-href]: https://github.com/nuxt-contrib/create-require/actions?query=workflow%3Atest
+
+[codecov-src]: https://img.shields.io/codecov/c/gh/nuxt-contrib/create-require/master?style=flat-square
+[codecov-href]: https://codecov.io/gh/nuxt-contrib/create-require
diff --git a/node_modules/create-require/create-require.d.ts b/node_modules/create-require/create-require.d.ts
new file mode 100644
index 0000000..451504d
--- /dev/null
+++ b/node_modules/create-require/create-require.d.ts
@@ -0,0 +1,3 @@
+import { URL } from 'url';
+
+export default function createRequire (filename: string | URL): NodeRequire;
diff --git a/node_modules/create-require/create-require.js b/node_modules/create-require/create-require.js
new file mode 100644
index 0000000..487082a
--- /dev/null
+++ b/node_modules/create-require/create-require.js
@@ -0,0 +1,49 @@
+const nativeModule = require('module')
+const path = require('path')
+const fs = require('fs')
+
+function createRequire (filename) {
+  // Fallback to process.cwd() if no filename passed
+  if (!filename) {
+    filename = process.cwd()
+  }
+
+  // If filename is dir, createRequire goes with parent directory, so we need fakepath
+  if (isDir(filename)) {
+    filename = path.join(filename, 'index.js')
+  }
+
+  // Added in Node v12.2.0
+  if (nativeModule.createRequire) {
+    return nativeModule.createRequire(filename)
+  }
+
+  // Added in Node v10.12.0 and deprecated since Node v12.2.0
+  if (nativeModule.createRequireFromPath) {
+    return nativeModule.createRequireFromPath(filename)
+  }
+
+  // Polyfill
+  return _createRequire(filename)
+}
+
+// Polyfill
+function _createRequire (filename) {
+  const mod = new nativeModule.Module(filename, null)
+  mod.filename = filename
+  mod.paths = nativeModule.Module._nodeModulePaths(path.dirname(filename))
+  mod._compile('module.exports = require;', filename)
+  return mod.exports
+}
+
+function isDir (path) {
+  try {
+    const stat = fs.lstatSync(path)
+    return stat.isDirectory()
+  } catch (e) {
+    // lstatSync throws an error if path doesn't exist
+    return false
+  }
+}
+
+module.exports = createRequire
diff --git a/node_modules/create-require/package.json b/node_modules/create-require/package.json
new file mode 100644
index 0000000..2e36a10
--- /dev/null
+++ b/node_modules/create-require/package.json
@@ -0,0 +1,39 @@
+{
+  "name": "create-require",
+  "version": "1.1.1",
+  "description": "Polyfill for Node.js module.createRequire (<= v12.2.0)",
+  "repository": "nuxt-contrib/create-require",
+  "license": "MIT",
+  "contributors": [
+    {
+      "name": "Maël Nison",
+      "email": "nison.mael@gmail.com"
+    },
+    {
+      "name": "Paul Soporan",
+      "email": "paul.soporan@gmail.com"
+    },
+    {
+      "name": "Pooya Parsa",
+      "email": "pyapar@gmail.com"
+    }
+  ],
+  "main": "./create-require.js",
+  "types": "./create-require.d.ts",
+  "files": [
+    "create-require.js",
+    "create-require.d.ts"
+  ],
+  "scripts": {
+    "lint": "eslint .",
+    "release": "yarn test && standard-version && git push --follow-tags && npm publish",
+    "test:matrix": "tap --no-esm --no-timeout ./test/matrix.js",
+    "test": "yarn lint && yarn test:matrix"
+  },
+  "devDependencies": {
+    "@nuxtjs/eslint-config": "latest",
+    "eslint": "latest",
+    "tap": "latest",
+    "standard-version": "latest"
+  }
+}
