From cfd98d367447a468f8f3b3167591a36f19a589a0 Mon Sep 17 00:00:00 2001 From: Igor Randjelovic Date: Mon, 12 Apr 2021 12:51:41 +0200 Subject: [PATCH] feat: sourceMap improvements --- packages/webpack5/package.json | 31 +++++++++++---------- packages/webpack5/src/configuration/base.ts | 28 +++++++++++++++++-- packages/webpack5/src/index.ts | 5 +++- 3 files changed, 45 insertions(+), 19 deletions(-) diff --git a/packages/webpack5/package.json b/packages/webpack5/package.json index 1b25fc7cd..927986b40 100644 --- a/packages/webpack5/package.json +++ b/packages/webpack5/package.json @@ -1,7 +1,7 @@ { "name": "@nativescript/webpack", - "version": "5.0.0-dev", - "private": true, + "version": "5.0.0-beta.5", + "private": false, "main": "dist/index.js", "files": [ "dist" @@ -17,23 +17,24 @@ "prepack": "npm test && npm run build && npm run copy-stubs && chmod +x dist/bin/index.js" }, "dependencies": { - "@babel/core": "7.13.14", + "@babel/core": "7.13.15", "@pmmmwh/react-refresh-webpack-plugin": "0.4.3", + "acorn": "^8.1.1", "acorn-stage3": "^4.0.0", "babel-loader": "8.2.2", "chalk": "4.1.0", "cli-highlight": "2.1.11", "commander": "7.2.0", - "copy-webpack-plugin": "8.1.0", + "copy-webpack-plugin": "8.1.1", "css": "3.0.0", - "css-loader": "5.2.0", + "css-loader": "5.2.1", "dotenv-webpack": "7.0.2", - "fork-ts-checker-webpack-plugin": "6.2.0", + "fork-ts-checker-webpack-plugin": "6.2.1", "loader-utils": "2.0.0", "lodash.get": "4.4.2", - "micromatch": "4.0.2", - "postcss": "8.2.8", - "postcss-import": "14.0.0", + "micromatch": "4.0.4", + "postcss": "8.2.10", + "postcss-import": "14.0.1", "postcss-loader": "5.2.0", "raw-loader": "4.0.2", "react-refresh": "0.10.0", @@ -42,10 +43,10 @@ "sax": "1.2.4", "source-map": "0.7.3", "terser-webpack-plugin": "5.1.1", - "ts-dedent": "2.1.0", + "ts-dedent": "2.1.1", "ts-loader": "8.1.0", "vue-loader": "15.9.6", - "webpack": "5.28.0", + "webpack": "5.31.2", "webpack-bundle-analyzer": "4.4.0", "webpack-chain": "6.5.1", "webpack-cli": "4.6.0", @@ -53,19 +54,19 @@ "webpack-virtual-modules": "0.4.2" }, "devDependencies": { - "@types/lodash.get": "4.4.6", - "@types/sax": "1.2.1", "@types/css": "0.0.31", "@types/jest": "26.0.22", "@types/loader-utils": "2.0.2", + "@types/lodash.get": "4.4.6", "@types/micromatch": "4.0.1", + "@types/sax": "1.2.1", "@types/terser-webpack-plugin": "5.0.3", "@types/webpack-virtual-modules": "0.1.1", "jest": "26.6.3", "jest-matcher-utils": "26.6.2", - "nativescript-vue-template-compiler": "2.8.4", + "nativescript-vue-template-compiler": "2.9.0", "ts-jest": "26.5.4", - "typescript": "4.2.3" + "typescript": "4.2.4" }, "peerDependencies": { "nativescript-vue-template-compiler": "^2.8.1" diff --git a/packages/webpack5/src/configuration/base.ts b/packages/webpack5/src/configuration/base.ts index 95382da39..e10a26841 100644 --- a/packages/webpack5/src/configuration/base.ts +++ b/packages/webpack5/src/configuration/base.ts @@ -1,4 +1,4 @@ -import { +import webpack, { ContextExclusionPlugin, DefinePlugin, HotModuleReplacementPlugin, @@ -44,8 +44,30 @@ export default function (config: Config, env: IWebpackEnv = _env): Config { // resolved at runtime config.externals(['package.json', '~/package.json']); - // todo: devtool - config.devtool('inline-source-map'); + const getSourceMapType = (map: string | boolean): Config.DevTool => { + const defaultSourceMap = 'inline-source-map'; + + if (typeof map === 'undefined') { + // source-maps disabled in production by default + // enabled with --env.sourceMap= + if (mode === 'production') { + // todo: we may set up SourceMapDevToolPlugin to generate external maps in production + return false; + } + + return defaultSourceMap; + } + + // when --env.sourceMap=true is passed, use default + if (typeof map === 'boolean' && map) { + return defaultSourceMap; + } + + // pass any type of sourceMap with --env.sourceMap= + return map as Config.DevTool; + }; + + config.devtool(getSourceMapType(env.sourceMap)); // todo: figure out easiest way to make "node" target work in ns // rather than the custom ns target implementation that's hard to maintain diff --git a/packages/webpack5/src/index.ts b/packages/webpack5/src/index.ts index 437f94c2a..7c072e477 100644 --- a/packages/webpack5/src/index.ts +++ b/packages/webpack5/src/index.ts @@ -2,7 +2,9 @@ // This must be at the top BEFORE webpack is loaded so that we can extend // and replace the parser before webpack uses it // Based on the issue: https://github.com/webpack/webpack/issues/10216 -const stage3 = require('acorn-stage3'); +import stage3 from 'acorn-stage3'; + +// we use require to be able to override the exports const acorn = require('acorn'); acorn.Parser = acorn.Parser.extend(stage3); @@ -33,6 +35,7 @@ export interface IWebpackEnv { // for custom platforms platform?: string; + sourceMap?: string | boolean; production?: boolean; report?: boolean; hmr?: boolean;