From 872e46a076c8d1096f3175dada4910ed6abde0dd Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Sat, 23 May 2020 13:53:26 -0700 Subject: [PATCH] Exclude packages rollup (#6007) --- build-scripts/rollup-plugins/ignore-plugin.js | 51 +++++++++++++++++++ build-scripts/rollup.js | 19 +++++-- 2 files changed, 65 insertions(+), 5 deletions(-) create mode 100644 build-scripts/rollup-plugins/ignore-plugin.js diff --git a/build-scripts/rollup-plugins/ignore-plugin.js b/build-scripts/rollup-plugins/ignore-plugin.js new file mode 100644 index 0000000000..4c6a7e61c0 --- /dev/null +++ b/build-scripts/rollup-plugins/ignore-plugin.js @@ -0,0 +1,51 @@ +const path = require("path"); + +module.exports = function (userOptions = {}) { + // Files need to be absolute paths. + // This only works if the file has no exports + // and only is imported for its side effects + const files = userOptions.files || []; + + if (files.length === 0) { + return { + name: "ignore", + }; + } + + return { + name: "ignore", + resolveId(importee, importer) { + // Only use ignore to intercept imports that we don't control + // inside node_module dependencies. + if ( + importee.endsWith("commonjsHelpers.js") || + importee.endsWith("?commonjs-proxy") || + !importer || + !importer.includes("/node_modules/") + ) { + return null; + } + let fullPath; + try { + fullPath = importee.startsWith(".") + ? path.resolve(importee, importer) + : require.resolve(importee); + } catch (err) { + console.error("Error in ignore plugin", { importee, importer }, err); + throw err; + } + + return files.some((toIgnorePath) => fullPath.startsWith(toIgnorePath)) + ? fullPath + : null; + }, + + load(id) { + return files.some((toIgnorePath) => id.startsWith(toIgnorePath)) + ? { + code: "", + } + : null; + }, + }; +}; diff --git a/build-scripts/rollup.js b/build-scripts/rollup.js index 7f7739990c..c27cee625a 100644 --- a/build-scripts/rollup.js +++ b/build-scripts/rollup.js @@ -11,8 +11,10 @@ const { terser } = require("rollup-plugin-terser"); const manifest = require("./rollup-plugins/manifest-plugin"); const worker = require("./rollup-plugins/worker-plugin"); const dontHashPlugin = require("./rollup-plugins/dont-hash-plugin"); +const ignore = require("./rollup-plugins/ignore-plugin"); const bundle = require("./bundle"); +const paths = require("./paths"); const extensions = [".js", ".ts"]; @@ -39,11 +41,18 @@ const createRollupConfig = ({ // Some entry points contain no JavaScript. This setting silences a warning about that. // https://rollupjs.org/guide/en/#preserveentrysignatures preserveEntrySignatures: false, - external: - bundle.ignorePackages({ latestBuild }) + - bundle.emptyPackages({ latestBuild }), plugins: [ - resolve({ extensions, preferBuiltins: false, browser: true }), + ignore({ + files: bundle + .ignorePackages({ latestBuild }) + .concat(bundle.emptyPackages({ latestBuild })), + }), + resolve({ + extensions, + preferBuiltins: false, + browser: true, + rootDir: paths.polymer_dir, + }), commonjs({ namedExports: { "js-yaml": ["safeDump", "safeLoad"], @@ -57,7 +66,7 @@ const createRollupConfig = ({ }), string({ // Import certain extensions as strings - include: ["**/*.css"], + include: [path.join(paths.polymer_dir, "node_modules/**/*.css")], }), replace( bundle.definedVars({ isProdBuild, latestBuild, defineOverlay })