Skip to content

Commit 70593f7

Browse files
committed
Remove the fancy preload logic in index.js
This is causing some friction for webpack users, and doesn't seem to be worth the trouble from a performance point of view in npm/cli. Ditch it. Fix #306
1 parent 70d9fb3 commit 70593f7

File tree

5 files changed

+53
-126
lines changed

5 files changed

+53
-126
lines changed

Diff for: README.md

+3-4
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,12 @@ semver.valid(semver.coerce('v2')) // '2.0.0'
2525
semver.valid(semver.coerce('42.6.7.9.3-alpha')) // '42.6.7'
2626
```
2727

28-
This module uses getters to lazily load only the parts of the package that
29-
are used. To use it with Webpack and other projects that need string
30-
literals as the argument to `require()`, load it this way:
28+
You can also just load the module for the function that you care about, if
29+
you'd like to minimize your footprint.
3130
3231
```js
3332
// load the whole API at once in a single object
34-
const semver = require('semver/preload')
33+
const semver = require('semver')
3534
3635
// or just load the bits you need
3736
// all of them listed here, just pick and choose what you want

Diff for: index.js

+45-63
Original file line numberDiff line numberDiff line change
@@ -1,64 +1,46 @@
1-
const lrCache = {}
2-
const lazyRequire = (path, subkey) => {
3-
const module = lrCache[path] || (lrCache[path] = require(path))
4-
return subkey ? module[subkey] : module
1+
// just pre-load all the stuff that index.js lazily exports
2+
const internalRe = require('./internal/re')
3+
module.exports = {
4+
re: internalRe.re,
5+
src: internalRe.src,
6+
tokens: internalRe.t,
7+
SEMVER_SPEC_VERSION: require('./internal/constants').SEMVER_SPEC_VERSION,
8+
SemVer: require('./classes/semver'),
9+
compareIdentifiers: require('./internal/identifiers').compareIdentifiers,
10+
rcompareIdentifiers: require('./internal/identifiers').rcompareIdentifiers,
11+
parse: require('./functions/parse'),
12+
valid: require('./functions/valid'),
13+
clean: require('./functions/clean'),
14+
inc: require('./functions/inc'),
15+
diff: require('./functions/diff'),
16+
major: require('./functions/major'),
17+
minor: require('./functions/minor'),
18+
patch: require('./functions/patch'),
19+
prerelease: require('./functions/prerelease'),
20+
compare: require('./functions/compare'),
21+
rcompare: require('./functions/rcompare'),
22+
compareLoose: require('./functions/compare-loose'),
23+
compareBuild: require('./functions/compare-build'),
24+
sort: require('./functions/sort'),
25+
rsort: require('./functions/rsort'),
26+
gt: require('./functions/gt'),
27+
lt: require('./functions/lt'),
28+
eq: require('./functions/eq'),
29+
neq: require('./functions/neq'),
30+
gte: require('./functions/gte'),
31+
lte: require('./functions/lte'),
32+
cmp: require('./functions/cmp'),
33+
coerce: require('./functions/coerce'),
34+
Comparator: require('./classes/comparator'),
35+
Range: require('./classes/range'),
36+
satisfies: require('./functions/satisfies'),
37+
toComparators: require('./ranges/to-comparators'),
38+
maxSatisfying: require('./ranges/max-satisfying'),
39+
minSatisfying: require('./ranges/min-satisfying'),
40+
minVersion: require('./ranges/min-version'),
41+
validRange: require('./ranges/valid'),
42+
outside: require('./ranges/outside'),
43+
gtr: require('./ranges/gtr'),
44+
ltr: require('./ranges/ltr'),
45+
intersects: require('./ranges/intersects'),
546
}
6-
7-
const lazyExport = (key, path, subkey) => {
8-
Object.defineProperty(exports, key, {
9-
get: () => {
10-
const res = lazyRequire(path, subkey)
11-
Object.defineProperty(exports, key, {
12-
value: res,
13-
enumerable: true,
14-
configurable: true
15-
})
16-
return res
17-
},
18-
configurable: true,
19-
enumerable: true
20-
})
21-
}
22-
23-
lazyExport('re', './internal/re', 're')
24-
lazyExport('src', './internal/re', 'src')
25-
lazyExport('tokens', './internal/re', 't')
26-
lazyExport('SEMVER_SPEC_VERSION', './internal/constants', 'SEMVER_SPEC_VERSION')
27-
lazyExport('SemVer', './classes/semver')
28-
lazyExport('compareIdentifiers', './internal/identifiers', 'compareIdentifiers')
29-
lazyExport('rcompareIdentifiers', './internal/identifiers', 'rcompareIdentifiers')
30-
lazyExport('parse', './functions/parse')
31-
lazyExport('valid', './functions/valid')
32-
lazyExport('clean', './functions/clean')
33-
lazyExport('inc', './functions/inc')
34-
lazyExport('diff', './functions/diff')
35-
lazyExport('major', './functions/major')
36-
lazyExport('minor', './functions/minor')
37-
lazyExport('patch', './functions/patch')
38-
lazyExport('prerelease', './functions/prerelease')
39-
lazyExport('compare', './functions/compare')
40-
lazyExport('rcompare', './functions/rcompare')
41-
lazyExport('compareLoose', './functions/compare-loose')
42-
lazyExport('compareBuild', './functions/compare-build')
43-
lazyExport('sort', './functions/sort')
44-
lazyExport('rsort', './functions/rsort')
45-
lazyExport('gt', './functions/gt')
46-
lazyExport('lt', './functions/lt')
47-
lazyExport('eq', './functions/eq')
48-
lazyExport('neq', './functions/neq')
49-
lazyExport('gte', './functions/gte')
50-
lazyExport('lte', './functions/lte')
51-
lazyExport('cmp', './functions/cmp')
52-
lazyExport('coerce', './functions/coerce')
53-
lazyExport('Comparator', './classes/comparator')
54-
lazyExport('Range', './classes/range')
55-
lazyExport('satisfies', './functions/satisfies')
56-
lazyExport('toComparators', './ranges/to-comparators')
57-
lazyExport('maxSatisfying', './ranges/max-satisfying')
58-
lazyExport('minSatisfying', './ranges/min-satisfying')
59-
lazyExport('minVersion', './ranges/min-version')
60-
lazyExport('validRange', './ranges/valid')
61-
lazyExport('outside', './ranges/outside')
62-
lazyExport('gtr', './ranges/gtr')
63-
lazyExport('ltr', './ranges/ltr')
64-
lazyExport('intersects', './ranges/intersects')

Diff for: preload.js

+2-46
Original file line numberDiff line numberDiff line change
@@ -1,46 +1,2 @@
1-
// just pre-load all the stuff that index.js lazily exports
2-
const internalRe = require('./internal/re')
3-
module.exports = {
4-
re: internalRe.re,
5-
src: internalRe.src,
6-
tokens: internalRe.t,
7-
SEMVER_SPEC_VERSION: require('./internal/constants').SEMVER_SPEC_VERSION,
8-
SemVer: require('./classes/semver'),
9-
compareIdentifiers: require('./internal/identifiers').compareIdentifiers,
10-
rcompareIdentifiers: require('./internal/identifiers').rcompareIdentifiers,
11-
parse: require('./functions/parse'),
12-
valid: require('./functions/valid'),
13-
clean: require('./functions/clean'),
14-
inc: require('./functions/inc'),
15-
diff: require('./functions/diff'),
16-
major: require('./functions/major'),
17-
minor: require('./functions/minor'),
18-
patch: require('./functions/patch'),
19-
prerelease: require('./functions/prerelease'),
20-
compare: require('./functions/compare'),
21-
rcompare: require('./functions/rcompare'),
22-
compareLoose: require('./functions/compare-loose'),
23-
compareBuild: require('./functions/compare-build'),
24-
sort: require('./functions/sort'),
25-
rsort: require('./functions/rsort'),
26-
gt: require('./functions/gt'),
27-
lt: require('./functions/lt'),
28-
eq: require('./functions/eq'),
29-
neq: require('./functions/neq'),
30-
gte: require('./functions/gte'),
31-
lte: require('./functions/lte'),
32-
cmp: require('./functions/cmp'),
33-
coerce: require('./functions/coerce'),
34-
Comparator: require('./classes/comparator'),
35-
Range: require('./classes/range'),
36-
satisfies: require('./functions/satisfies'),
37-
toComparators: require('./ranges/to-comparators'),
38-
maxSatisfying: require('./ranges/max-satisfying'),
39-
minSatisfying: require('./ranges/min-satisfying'),
40-
minVersion: require('./ranges/min-version'),
41-
validRange: require('./ranges/valid'),
42-
outside: require('./ranges/outside'),
43-
gtr: require('./ranges/gtr'),
44-
ltr: require('./ranges/ltr'),
45-
intersects: require('./ranges/intersects'),
46-
}
1+
// XXX remove in v8 or beyond
2+
module.exports = require('./index.js')

Diff for: test/index.js

+2-12
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,11 @@
11
const t = require('tap')
22
const semver = require('../')
3-
4-
t.match(Object.getOwnPropertyDescriptor(semver, 'SEMVER_SPEC_VERSION'), {
5-
get: Function,
6-
set: undefined,
7-
enumerable: true,
8-
configurable: true
9-
}, 'properties are getters')
10-
113
const {SEMVER_SPEC_VERSION} = require('../internal/constants')
12-
t.match(semver.SEMVER_SPEC_VERSION, SEMVER_SPEC_VERSION, 'getter returns expected value')
4+
135
t.match(Object.getOwnPropertyDescriptor(semver, 'SEMVER_SPEC_VERSION'), {
146
get: undefined,
157
set: undefined,
168
value: SEMVER_SPEC_VERSION,
179
configurable: true,
1810
enumerable: true
19-
}, 'replaced with value prop after initial get')
20-
21-
t.match(semver.parse, require('../functions/parse'), 'getter that does not have a subkey')
11+
}, 'just a normal value property')

Diff for: test/preload.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
const t = require('tap')
22
const preload = require('../preload.js')
33
const index = require('../index.js')
4-
t.strictSame(preload, index, 'preload and index match')
4+
t.equal(preload, index, 'preload and index match')

0 commit comments

Comments
 (0)