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

Commit 2af9547

Browse files
authored
Merge pull request #1051 from NativeScript/fatme/compilation-errors
fix: handle correctly webpack compilation errorrs
2 parents 9a5795f + 363c4da commit 2af9547

8 files changed

+43
-15
lines changed

plugins/WatchStateLoggerPlugin.ts

+2-3
Original file line numberDiff line numberDiff line change
@@ -29,15 +29,14 @@ export class WatchStateLoggerPlugin {
2929
console.log(messages.compilationComplete);
3030
}
3131

32-
let emittedFiles = Object
32+
const emittedFiles = Object
3333
.keys(compilation.assets)
3434
.filter(assetKey => compilation.assets[assetKey].emitted);
3535

3636
const chunkFiles = getChunkFiles(compilation);
37-
3837
process.send && process.send(messages.compilationComplete, error => null);
3938
// Send emitted files so they can be LiveSynced if need be
40-
process.send && process.send({ emittedFiles, chunkFiles }, error => null);
39+
process.send && process.send({ emittedFiles, chunkFiles, hash: compilation.hash }, error => null);
4140
});
4241
}
4342
}

templates/webpack.angular.js

+4
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ const { nsReplaceBootstrap } = require("nativescript-dev-webpack/transformers/ns
77
const { nsReplaceLazyLoader } = require("nativescript-dev-webpack/transformers/ns-replace-lazy-loader");
88
const { nsSupportHmrNg } = require("nativescript-dev-webpack/transformers/ns-support-hmr-ng");
99
const { getMainModulePath } = require("nativescript-dev-webpack/utils/ast-utils");
10+
const { getNoEmitOnErrorFromTSConfig } = require("nativescript-dev-webpack/utils/tsconfig-utils");
1011
const CleanWebpackPlugin = require("clean-webpack-plugin");
1112
const CopyWebpackPlugin = require("copy-webpack-plugin");
1213
const { BundleAnalyzerPlugin } = require("webpack-bundle-analyzer");
@@ -109,6 +110,8 @@ module.exports = env => {
109110
itemsToClean.push(`${join(projectRoot, "platforms", "android", "app", "build", "configurations", "nativescript-android-snapshot")}`);
110111
}
111112

113+
const noEmitOnErrorFromTSConfig = getNoEmitOnErrorFromTSConfig(join(projectRoot, tsConfigName));
114+
112115
nsWebpack.processAppComponents(appComponents, platform);
113116
const config = {
114117
mode: production ? "production" : "development",
@@ -160,6 +163,7 @@ module.exports = env => {
160163
devtool: hiddenSourceMap ? "hidden-source-map" : (sourceMap ? "inline-source-map" : "none"),
161164
optimization: {
162165
runtimeChunk: "single",
166+
noEmitOnErrors: noEmitOnErrorFromTSConfig,
163167
splitChunks: {
164168
cacheGroups: {
165169
vendor: {

templates/webpack.config.spec.ts

+2
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ const webpackConfigAngular = proxyquire('./webpack.angular', {
4848
'nativescript-dev-webpack/transformers/ns-replace-lazy-loader': { nsReplaceLazyLoader: () => { return FakeLazyTransformerFlag } },
4949
'nativescript-dev-webpack/transformers/ns-support-hmr-ng': { nsSupportHmrNg: () => { return FakeHmrTransformerFlag } },
5050
'nativescript-dev-webpack/utils/ast-utils': { getMainModulePath: () => { return "fakePath"; } },
51+
'nativescript-dev-webpack/utils/tsconfig-utils': { getNoEmitOnErrorFromTSConfig: () => { return false; } },
5152
'nativescript-dev-webpack/plugins/NativeScriptAngularCompilerPlugin': { getAngularCompilerPlugin: () => { return AngularCompilerStub; } },
5253
'@ngtools/webpack': {
5354
AngularCompilerPlugin: AngularCompilerStub
@@ -58,6 +59,7 @@ const webpackConfigAngular = proxyquire('./webpack.angular', {
5859
const webpackConfigTypeScript = proxyquire('./webpack.typescript', {
5960
'nativescript-dev-webpack': nativeScriptDevWebpack,
6061
'nativescript-dev-webpack/nativescript-target': emptyObject,
62+
'nativescript-dev-webpack/utils/tsconfig-utils': { getNoEmitOnErrorFromTSConfig: () => { return false; } },
6163
'terser-webpack-plugin': TerserJsStub
6264
});
6365

templates/webpack.javascript.js

+1
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,7 @@ module.exports = env => {
123123
devtool: hiddenSourceMap ? "hidden-source-map" : (sourceMap ? "inline-source-map" : "none"),
124124
optimization: {
125125
runtimeChunk: "single",
126+
noEmitOnErrors: true,
126127
splitChunks: {
127128
cacheGroups: {
128129
vendor: {

templates/webpack.typescript.js

+5
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ const { join, relative, resolve, sep } = require("path");
33
const webpack = require("webpack");
44
const nsWebpack = require("nativescript-dev-webpack");
55
const nativescriptTarget = require("nativescript-dev-webpack/nativescript-target");
6+
const { getNoEmitOnErrorFromTSConfig } = require("nativescript-dev-webpack/utils/tsconfig-utils");
67
const CleanWebpackPlugin = require("clean-webpack-plugin");
78
const CopyWebpackPlugin = require("copy-webpack-plugin");
89
const ForkTsCheckerWebpackPlugin = require('fork-ts-checker-webpack-plugin');
@@ -73,6 +74,8 @@ module.exports = env => {
7374
itemsToClean.push(`${join(projectRoot, "platforms", "android", "app", "build", "configurations", "nativescript-android-snapshot")}`);
7475
}
7576

77+
const noEmitOnErrorFromTSConfig = getNoEmitOnErrorFromTSConfig(tsConfigPath);
78+
7679
nsWebpack.processAppComponents(appComponents, platform);
7780
const config = {
7881
mode: production ? "production" : "development",
@@ -126,6 +129,7 @@ module.exports = env => {
126129
devtool: hiddenSourceMap ? "hidden-source-map" : (sourceMap ? "inline-source-map" : "none"),
127130
optimization: {
128131
runtimeChunk: "single",
132+
noEmitOnErrors: noEmitOnErrorFromTSConfig,
129133
splitChunks: {
130134
cacheGroups: {
131135
vendor: {
@@ -255,6 +259,7 @@ module.exports = env => {
255259
tsconfig: tsConfigPath,
256260
async: false,
257261
useTypescriptIncrementalApi: true,
262+
checkSyntacticErrors: true,
258263
memoryLimit: 4096
259264
})
260265
],

templates/webpack.vue.js

+1
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,7 @@ module.exports = env => {
132132
devtool: hiddenSourceMap ? "hidden-source-map" : (sourceMap ? "inline-source-map" : "none"),
133133
optimization: {
134134
runtimeChunk: "single",
135+
noEmitOnErrors: true,
135136
splitChunks: {
136137
cacheGroups: {
137138
vendor: {

utils/ast-utils.ts

+3-12
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import { dirname, join, relative } from "path";
1818
import * as ts from "typescript";
1919
import { readFileSync, existsSync } from "fs";
2020
import { collectDeepNodes } from "@ngtools/webpack/src/transformers";
21+
import { getCompilerOptionsFromTSConfig } from "./tsconfig-utils";
2122

2223
export function getMainModulePath(entryFilePath: string, tsConfigName: string) {
2324
try {
@@ -43,23 +44,13 @@ export function getMainModulePath(entryFilePath: string, tsConfigName: string) {
4344
function tsResolve(moduleName: string, containingFilePath: string, tsConfigName: string) {
4445
let result = moduleName;
4546
try {
46-
const parseConfigFileHost: ts.ParseConfigFileHost = {
47-
getCurrentDirectory: ts.sys.getCurrentDirectory,
48-
useCaseSensitiveFileNames: false,
49-
readDirectory: ts.sys.readDirectory,
50-
fileExists: ts.sys.fileExists,
51-
readFile: ts.sys.readFile,
52-
onUnRecoverableConfigFileDiagnostic: undefined
53-
};
54-
55-
const tsConfig = ts.getParsedCommandLineOfConfigFile(tsConfigName, ts.getDefaultCompilerOptions(), parseConfigFileHost);
56-
57-
const compilerOptions: ts.CompilerOptions = tsConfig.options || ts.getDefaultCompilerOptions();
5847
const moduleResolutionHost: ts.ModuleResolutionHost = {
5948
fileExists: ts.sys.fileExists,
6049
readFile: ts.sys.readFile
6150
};
6251

52+
const compilerOptions = getCompilerOptionsFromTSConfig(tsConfigName);
53+
6354
const resolutionResult = ts.resolveModuleName(moduleName, containingFilePath, compilerOptions, moduleResolutionHost);
6455

6556
if (resolutionResult && resolutionResult.resolvedModule && resolutionResult.resolvedModule.resolvedFileName) {

utils/tsconfig-utils.ts

+25
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import * as ts from "typescript";
2+
3+
export function getCompilerOptionsFromTSConfig(tsConfigPath: string): ts.CompilerOptions {
4+
const parseConfigFileHost: ts.ParseConfigFileHost = {
5+
getCurrentDirectory: ts.sys.getCurrentDirectory,
6+
useCaseSensitiveFileNames: false,
7+
readDirectory: ts.sys.readDirectory,
8+
fileExists: ts.sys.fileExists,
9+
readFile: ts.sys.readFile,
10+
onUnRecoverableConfigFileDiagnostic: undefined
11+
};
12+
13+
const tsConfig = ts.getParsedCommandLineOfConfigFile(tsConfigPath, ts.getDefaultCompilerOptions(), parseConfigFileHost);
14+
15+
const compilerOptions: ts.CompilerOptions = tsConfig.options || ts.getDefaultCompilerOptions();
16+
17+
return compilerOptions;
18+
}
19+
20+
export function getNoEmitOnErrorFromTSConfig(tsConfigPath: string): boolean {
21+
const compilerOptions = getCompilerOptionsFromTSConfig(tsConfigPath);
22+
const noEmitOnError = !!compilerOptions.noEmitOnError;
23+
24+
return noEmitOnError;
25+
}

0 commit comments

Comments
 (0)