Skip to content
This repository was archived by the owner on Aug 4, 2021. It is now read-only.

Commit 0b1ef84

Browse files
committed
Merge pull request #16 from rollup/skip-true
implement skip:true
2 parents b7eb8a5 + e5247f0 commit 0b1ef84

File tree

7 files changed

+52
-5
lines changed

7 files changed

+52
-5
lines changed

src/index.js

+7-5
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ export default function npm ( options ) {
2424
id += `/${parts.shift()}`;
2525
}
2626

27-
if ( ~skip.indexOf(id) ) return null;
27+
if ( skip !== true && ~skip.indexOf( id ) ) return null;
2828

2929
// disregard entry module
3030
if ( !importer ) return null;
@@ -35,23 +35,25 @@ export default function npm ( options ) {
3535
{
3636
basedir: dirname( importer ),
3737
packageFilter ( pkg ) {
38-
const id = pkg[ 'name' ];
3938
if ( options.jsnext ) {
4039
const main = pkg[ 'jsnext:main' ];
4140
if ( main ) {
4241
pkg[ 'main' ] = main;
4342
} else if ( !useMain ) {
44-
reject( Error( `Package ${id} (imported by ${importer}) does not have a jsnext:main field. You should either allow legacy modules with options.main, or skip it with options.skip = ['${id}'])` ) );
43+
if ( skip === true ) accept( false );
44+
else reject( Error( `Package ${importee} (imported by ${importer}) does not have a jsnext:main field. You should either allow legacy modules with options.main, or skip it with options.skip = ['${importee}'])` ) );
4545
}
4646
} else if ( !useMain ) {
47-
reject( Error( `To import from a package in node_modules (${id}), either options.jsnext or options.main must be true` ) );
47+
if ( skip === true ) accept( false );
48+
else reject( Error( `To import from a package in node_modules (${importee}), either options.jsnext or options.main must be true` ) );
4849
}
4950
return pkg;
5051
}
5152
},
5253
( err, resolved ) => {
5354
if ( err ) {
54-
reject( err );
55+
if ( skip === true ) accept( false );
56+
else reject( err );
5557
} else {
5658
if ( resolved === COMMONJS_BROWSER_EMPTY ) resolved = ES6_BROWSER_EMPTY;
5759
if ( ~builtins.indexOf( resolved ) ) resolved = null;

test/node_modules/jsnext/entry.js

+1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

test/node_modules/jsnext/package.json

+3
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

test/node_modules/legacy/entry.js

+1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

test/node_modules/legacy/package.json

+3
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

test/samples/skip-true/main.js

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import jsnext from 'jsnext';
2+
import legacy from 'legacy';
3+
import missing from 'missing';
4+
5+
console.log( jsnext );
6+
console.log( legacy );
7+
console.log( missing );

test/test.js

+30
Original file line numberDiff line numberDiff line change
@@ -210,4 +210,34 @@ describe( 'rollup-plugin-npm', function () {
210210
assert.deepEqual( bundle.imports, [ '@scoped/foo' ]);
211211
});
212212
});
213+
214+
it( 'skip: true allows all unfound non-jsnext:main dependencies to be skipped without error', () => {
215+
return rollup.rollup({
216+
entry: 'samples/skip-true/main.js',
217+
plugins: [
218+
npm({
219+
jsnext: true,
220+
main: false,
221+
skip: true
222+
})
223+
]
224+
}).then( bundle => {
225+
assert.deepEqual( bundle.imports, [ 'legacy', 'missing' ]);
226+
});
227+
});
228+
229+
it( 'skip: true allows all unfound dependencies to be skipped without error', () => {
230+
return rollup.rollup({
231+
entry: 'samples/skip-true/main.js',
232+
plugins: [
233+
npm({
234+
jsnext: false,
235+
main: false,
236+
skip: true
237+
})
238+
]
239+
}).then( bundle => {
240+
assert.deepEqual( bundle.imports, [ 'jsnext', 'legacy', 'missing' ]);
241+
});
242+
});
213243
});

0 commit comments

Comments
 (0)