diff --git a/CHANGELOG.md b/CHANGELOG.md index d83646e9..cfdee7ff 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,13 @@ + +## [0.19.2](https://github.com/NativeScript/nativescript-dev-webpack/compare/0.19.1...0.19.2) (2019-02-01) + + +### Bug Fixes + +* optimize platform specific files resolver ([#782](https://github.com/NativeScript/nativescript-dev-webpack/issues/782)) ([fb52c53](https://github.com/NativeScript/nativescript-dev-webpack/commit/fb52c53)) + + + ## [0.19.1](https://github.com/NativeScript/nativescript-dev-webpack/compare/0.19.0...0.19.1) (2019-01-28) diff --git a/host/resolver.ts b/host/resolver.ts index 13e7cc04..30d8c7a0 100644 --- a/host/resolver.ts +++ b/host/resolver.ts @@ -1,23 +1,42 @@ -import { - parse, - join, -} from "path"; +import { parse, join } from "path"; import { statSync } from "fs"; -export function getResolver(platforms: string[]) { - return function(path: string) { +export function getResolver(platforms: string[], explicitResolve: string[] = []) { + const platformSpecificExt = [".ts", ".js", ".scss", ".less", ".css", ".html", ".xml", ".vue", ".json"]; + const nsPackageFilters = [ + 'nativescript', + 'tns', + 'ns' + ]; + + return function (path: string) { + const nmIndex = path.lastIndexOf('node_modules'); + + if (nmIndex !== -1) { + const subPath = path.substr(nmIndex + 'node_modules'.length).replace(/\\/g, '/'); + const shouldResolve = explicitResolve.length && explicitResolve.some(packageName => subPath.indexOf(packageName) !== -1); + const pathParts = subPath.split(/[/\-_]/); + + if (!shouldResolve && pathParts.every(p => nsPackageFilters.every(f => f !== p))) { + return path; + } + } + const { dir, name, ext } = parse(path); + if (platformSpecificExt.indexOf(ext) === -1) { + return path; + } + for (const platform of platforms) { const platformFileName = `${name}.${platform}${ext}`; const platformPath = toSystemPath(join(dir, platformFileName)); try { - const stat = statSync(platformPath); - if (stat && stat.isFile()) { + if (statSync(platformPath)) { return platformPath; } - } catch(_e) { + } catch (_e) { // continue checking the other platforms } } @@ -34,6 +53,6 @@ function toSystemPath(path: string) { const drive = path.match(/^\\(\w)\\(.*)$/); return drive ? - `${drive[1]}:\\${drive[2]}`: + `${drive[1]}:\\${drive[2]}` : path; } diff --git a/package.json b/package.json index 5b311ee5..7496b3cc 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "nativescript-dev-webpack", - "version": "0.19.1", + "version": "0.19.2", "main": "index", "description": "", "homepage": "http://www.telerik.com",