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

implement skip:true #16

Merged
merged 1 commit into from
Jan 19, 2016
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 7 additions & 5 deletions src/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ export default function npm ( options ) {
id += `/${parts.shift()}`;
}

if ( ~skip.indexOf(id) ) return null;
if ( skip !== true && ~skip.indexOf( id ) ) return null;

// disregard entry module
if ( !importer ) return null;
Expand All @@ -35,23 +35,25 @@ export default function npm ( options ) {
{
basedir: dirname( importer ),
packageFilter ( pkg ) {
const id = pkg[ 'name' ];
if ( options.jsnext ) {
const main = pkg[ 'jsnext:main' ];
if ( main ) {
pkg[ 'main' ] = main;
} else if ( !useMain ) {
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}'])` ) );
if ( skip === true ) accept( false );
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}'])` ) );
}
} else if ( !useMain ) {
reject( Error( `To import from a package in node_modules (${id}), either options.jsnext or options.main must be true` ) );
if ( skip === true ) accept( false );
else reject( Error( `To import from a package in node_modules (${importee}), either options.jsnext or options.main must be true` ) );
}
return pkg;
}
},
( err, resolved ) => {
if ( err ) {
reject( err );
if ( skip === true ) accept( false );
else reject( err );
} else {
if ( resolved === COMMONJS_BROWSER_EMPTY ) resolved = ES6_BROWSER_EMPTY;
if ( ~builtins.indexOf( resolved ) ) resolved = null;
Expand Down
1 change: 1 addition & 0 deletions test/node_modules/jsnext/entry.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 3 additions & 0 deletions test/node_modules/jsnext/package.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions test/node_modules/legacy/entry.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 3 additions & 0 deletions test/node_modules/legacy/package.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

7 changes: 7 additions & 0 deletions test/samples/skip-true/main.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
import jsnext from 'jsnext';
import legacy from 'legacy';
import missing from 'missing';

console.log( jsnext );
console.log( legacy );
console.log( missing );
30 changes: 30 additions & 0 deletions test/test.js
Original file line number Diff line number Diff line change
Expand Up @@ -210,4 +210,34 @@ describe( 'rollup-plugin-npm', function () {
assert.deepEqual( bundle.imports, [ '@scoped/foo' ]);
});
});

it( 'skip: true allows all unfound non-jsnext:main dependencies to be skipped without error', () => {
return rollup.rollup({
entry: 'samples/skip-true/main.js',
plugins: [
npm({
jsnext: true,
main: false,
skip: true
})
]
}).then( bundle => {
assert.deepEqual( bundle.imports, [ 'legacy', 'missing' ]);
});
});

it( 'skip: true allows all unfound dependencies to be skipped without error', () => {
return rollup.rollup({
entry: 'samples/skip-true/main.js',
plugins: [
npm({
jsnext: false,
main: false,
skip: true
})
]
}).then( bundle => {
assert.deepEqual( bundle.imports, [ 'jsnext', 'legacy', 'missing' ]);
});
});
});