Skip to content

Commit 8339024

Browse files
committed
Merge branch 'release/1.1.4'
2 parents 03f2f98 + b76ec57 commit 8339024

File tree

8 files changed

+1382
-301
lines changed

8 files changed

+1382
-301
lines changed

.eslintrc-ava.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
module.exports = {
2+
root: true,
3+
plugins: ['ava'],
4+
extends: 'plugin:ava/recommended'
5+
}

.eslintrc.js

Lines changed: 0 additions & 14 deletions
This file was deleted.

.gitignore

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,3 +6,7 @@ node_modules
66

77
# Compiled files
88
dist
9+
10+
# Coverage
11+
coverage
12+
.nyc_output

.travis.yml

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
language: node_js
2+
node_js:
3+
- "8"
4+
- "6"
5+
- "4"
6+
install:
7+
- yarn install
8+
script:
9+
- yarn run test
10+
after_success:
11+
- yarn run coverage

README.md

Lines changed: 50 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,71 @@
11
native-require
22
==============
3-
*Resolve requires in easy way*
3+
4+
*Resolve requires in an easy way*
5+
6+
[![npm](https://img.shields.io/npm/v/native-require.svg)](https://www.npmjs.com/package/native-require)
7+
[![Travis](https://img.shields.io/travis/shirohana/native-require.svg)](https://www.npmjs.com/package/native-require)
8+
[![Codecov branch](https://img.shields.io/codecov/c/github/shirohana/native-require/dev.svg)](https://codecov.io/gh/shirohana/native-require/branch/dev)
9+
[![license](https://img.shields.io/github/license/shirohana/native-require.svg)](https://www.npmjs.com/package/native-require)
10+
11+
[![JavaScript Style Guide](https://cdn.rawgit.com/standard/standard/master/badge.svg)](https://github.com/standard/standard)
412

513
Getting started
614
---------------
715

8-
```sh
9-
$ npm install native-require --save-dev
16+
##### Install
17+
```
18+
$ npm install native-require --save
1019
```
1120

12-
#### Require or Resolve from where you want
13-
21+
##### Require or Resolve from where you want
1422
```javascript
15-
import nrequire from 'native-require'
23+
import _require from 'native-require'
1624

17-
// Normal use but helpful to require externals
18-
const axios = nrequire('axios')
25+
// Seems normal but useful to resolve external modules when using bunlders
26+
const axios = _require('axios')
1927

20-
// Require from specified basedir
21-
const model = nrequire.from('./src/model')
28+
// Require from specific directory
29+
const model = _require.from('./src/model')
2230

2331
const User = model('./user')
24-
const Production = model.require('./production') // <-- Alias
32+
// Alias
33+
const User = model.require('./user')
2534
```
2635

36+
Features
37+
--------
38+
39+
- Simple to use, no more you didn't need
40+
- Relative requires from specific directory
41+
- Resolve external warnings from bundlers (Webpack, Rollup, etc.)
42+
- Higher performance (no `Module` will be created)
43+
- No dependencies
44+
- Compatible in Node v4, v6 and v8
45+
2746
API
2847
---
2948

30-
- `nrequire(request)`
49+
#### `_require(request)` (default export)
50+
51+
> Same as `require()`, but resolve external problems from bundlers
3152
32-
- `.require(request)`
53+
#### `.require(request)`
3354

34-
- `.resolve(request)`
55+
> Alias of `_require()`
3556
36-
- `.from(basedir)`
57+
#### `.resolve(request)`
58+
59+
> Same as `require.resolve()`
60+
61+
#### `.from(basedir)`
62+
63+
> ###### Create a new `native-require` instance but lookup modules from `basedir`
64+
65+
One `basedir` only create instance once, so never worry about used like
66+
67+
```javascript
68+
_require.from(modelDir).require('./user')
69+
_require.from(modelDir).require('./post')
70+
_require.from(modelDir).require('./comment')
71+
```

index.js

Lines changed: 38 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -1,78 +1,75 @@
1-
const Module = require('module');
2-
const path = require('path');
1+
const Module = require('module')
2+
const path = require('path')
33

4-
// To solve relative requirings and resolvings for `nrequire.from`
5-
const NON_EXISTS_FILENAME = '__native_require__';
4+
// To solve relative requires and resolves from `_require.from`
5+
const UNIQUE_FILENAME = '__NATIVE_REQUIRE__'
66

7-
const cache = {};
7+
const cache = {}
88

99
function resolveBasedir (basedir) {
10-
if (path.isAbsolute(basedir)) {
11-
return basedir;
12-
} else if (module.parent && typeof module.parent.filename === 'string') {
13-
return path.join(path.dirname(module.parent.filename), basedir); // Required from module
14-
}
15-
return path.join(process.cwd(), basedir); // Required from Node CLI
10+
/* istanbul ignore next: `module.parent` will be undefined when required from Node CLI */
11+
const moduleBasedir = (module.parent && module.parent.filename ? path.dirname(module.parent.filename) : process.cwd())
12+
return (basedir ? path.resolve(moduleBasedir, basedir) : moduleBasedir)
1613
}
1714

18-
function initOptions (_options) {
19-
// Shallow copy to prevent side effect
20-
const options = (typeof _options === 'object') ? Object.assign({}, _options) : {};
21-
options.basedir = resolveBasedir(options.basedir || '');
22-
23-
return options;
15+
function initOptions (_opt) {
16+
const opt = _opt || {}
17+
const options = {}
18+
options.basedir = resolveBasedir(opt.basedir)
19+
return options
2420
}
2521

26-
function nativeRequire (_options) {
27-
const options = initOptions(_options);
28-
const nmodule = {
22+
function nativeRequire (opt) {
23+
const options = initOptions(opt)
24+
const _module = {
2925
id: '<repl>',
3026
exports: {},
3127
parent: module.parent,
32-
filename: path.join(options.basedir, NON_EXISTS_FILENAME),
28+
filename: path.join(options.basedir, UNIQUE_FILENAME),
3329
loaded: false,
3430
children: [],
3531
paths: Module._nodeModulePaths(options.basedir)
36-
};
32+
}
3733

38-
const nrequire = function require (request) {
34+
function _require (request) {
3935
try {
40-
return Module.prototype.require.call(nmodule, request);
36+
return Module.prototype.require.call(_module, request)
4137
} catch (err) {
38+
/* istanbul ignore else */
4239
if (err.code === 'MODULE_NOT_FOUND') {
43-
err.message += ' from \'' + options.basedir + '\'';
40+
err.message += ` from '${options.basedir}'`
4441
}
45-
throw err;
42+
throw err
4643
}
47-
};
44+
}
4845

49-
Object.assign(nrequire, {
46+
Object.assign(_require, {
5047
main: process.mainModule,
5148
extensions: Module._extensions,
5249
cache: Module._cache,
53-
require: nrequire,
54-
resolve: function resolve (request) {
50+
require: _require,
51+
resolve: function (request) {
5552
try {
56-
return Module._resolveFilename(request, nmodule);
53+
return Module._resolveFilename(request, _module)
5754
} catch (err) {
55+
/* istanbul ignore else */
5856
if (err.code === 'MODULE_NOT_FOUND') {
59-
err.message += ' from \'' + options.basedir + '\'';
57+
err.message += ` from '${options.basedir}'`
6058
}
61-
throw err;
59+
throw err
6260
}
6361
},
64-
from: function from (_basedir) {
65-
const basedir = resolveBasedir(_basedir);
66-
62+
from: function (from) {
63+
const basedir = resolveBasedir(from)
6764
return cache[basedir] || (cache[basedir] = nativeRequire({
6865
basedir: basedir
69-
}));
66+
}))
7067
}
71-
});
68+
})
7269

73-
return nrequire;
70+
return _require
7471
}
7572

76-
const instance = nativeRequire();
73+
const instance = nativeRequire()
7774

78-
module.exports = instance;
75+
module.exports = instance

package.json

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "native-require",
3-
"version": "1.1.3",
4-
"description": "Used to require() external modules in webpack",
3+
"version": "1.1.4",
4+
"description": "To resolve external modules for bundlers",
55
"main": "index.js",
66
"repository": "https://github.com/shirohana/native-require/",
77
"author": "Hana Shiro <shirohana0608@gmail.com>",
@@ -10,22 +10,26 @@
1010
"index.js"
1111
],
1212
"keywords": [
13-
"webpack",
14-
"require",
15-
"node_modules",
1613
"node",
17-
"externals"
14+
"require",
15+
"resolve",
16+
"externals",
17+
"node_modules"
1818
],
1919
"scripts": {
20-
"test": "npm run lint && ava --verbose test/",
21-
"lint": "eslint --ext .js index.js",
20+
"test": "npm run lint && nyc ava --verbose test/ && nyc report --reporter=html",
21+
"coverage": "nyc report --reporter=text-lcov > coverage.lcov && codecov",
22+
"lint": "standard index.js && eslint --config .eslintrc-ava.js test/",
2223
"precommit": "npm run lint"
2324
},
2425
"devDependencies": {
2526
"ava": "^0.22.0",
2627
"chalk": "^2.1.0",
27-
"eslint": "^4.5.0",
28-
"eslint-config-es5": "^0.5.0",
29-
"husky": "^0.14.3"
28+
"codecov": "^2.3.0",
29+
"eslint": "^4.16.0",
30+
"eslint-plugin-ava": "^4.5.0",
31+
"husky": "^0.14.3",
32+
"nyc": "^11.1.0",
33+
"standard": "^10.0.3"
3034
}
3135
}

0 commit comments

Comments
 (0)