From f708c51ea1ef7629467f50c19fb14cc2822d9f34 Mon Sep 17 00:00:00 2001 From: Guy Bedford Date: Tue, 29 Jan 2019 16:30:58 +0200 Subject: [PATCH] ensure local ts is always a project-scoped lookup --- scripts/build.js | 6 ++++-- src/index.js | 3 ++- src/loaders/ts-loader.js | 13 ++++--------- src/typescript.js | 1 + src/typescript/index.js | 1 - 5 files changed, 11 insertions(+), 13 deletions(-) create mode 100644 src/typescript.js delete mode 100644 src/typescript/index.js diff --git a/scripts/build.js b/scripts/build.js index ec02024e..d530c1c7 100644 --- a/scripts/build.js +++ b/scripts/build.js @@ -99,16 +99,18 @@ async function main() { writeFileSync(__dirname + "/../dist/ncc/cli.js", cli); writeFileSync(__dirname + "/../dist/ncc/index.js", index); writeFileSync(__dirname + "/../dist/ncc/typescript.js", ` +const { Module } = require('module'); +const m = new Module('', null); +m.paths = Module._nodeModulePaths(process.env.TYPESCRIPT_LOOKUP_PATH || (process.cwd() + '/')); let typescript; try { - typescript = require('typescript'); + typescript = m.require('typescript'); console.log("ncc: Using typescript@" + typescript.version + " (local user-provided)"); } catch (e) { typescript = require('./loaders/ts-loader.js').typescript; console.log("ncc: Using typescript@" + typescript.version + " (ncc built-in)"); } - module.exports = typescript; `); writeFileSync(__dirname + "/../dist/ncc/sourcemap-register.js", sourcemapSupport); diff --git a/src/index.js b/src/index.js index 8e113506..bc57b31c 100644 --- a/src/index.js +++ b/src/index.js @@ -42,6 +42,7 @@ module.exports = ( } = {} ) => { const resolvedEntry = resolve.sync(entry); + process.env.TYPESCRIPT_LOOKUP_PATH = resolvedEntry; const shebangMatch = fs.readFileSync(resolvedEntry).toString().match(shebangRegEx); const mfs = new MemoryFS(); const assetNames = Object.create(null); @@ -154,7 +155,7 @@ module.exports = ( { loader: eval('__dirname + "/loaders/ts-loader.js"'), options: { - compiler: eval('__dirname + "/typescript"'), + compiler: eval('__dirname + "/typescript.js"'), compilerOptions: { outDir: '//' } diff --git a/src/loaders/ts-loader.js b/src/loaders/ts-loader.js index c56c92c8..71f65480 100644 --- a/src/loaders/ts-loader.js +++ b/src/loaders/ts-loader.js @@ -16,14 +16,9 @@ logger.makeLogger = function (loaderOptions, colors) { return instance; }; -const { getOptions } = require("loader-utils"); -const loader = require("ts-loader"); -module.exports = function () { - const options = getOptions(this); - if (!options.compiler) - options.compiler = eval('__dirname + "/../typescript"'); - - return loader.apply(this, arguments); -}; +module.exports = require("ts-loader"); +// ts-loader internally has a require("typescript") that applies +// regardless of "compiler". +// We could remap this too, as soon as ncc supports aliased externals module.exports.typescript = require("typescript"); diff --git a/src/typescript.js b/src/typescript.js new file mode 100644 index 00000000..0a3352bb --- /dev/null +++ b/src/typescript.js @@ -0,0 +1 @@ +module.exports = require("typescript"); diff --git a/src/typescript/index.js b/src/typescript/index.js deleted file mode 100644 index 3b2cc9d0..00000000 --- a/src/typescript/index.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('typescript');