Skip to content

Commit 8cce41d

Browse files
committed
fix(@angular/cli): remove typescript dependency
1 parent efcf1dc commit 8cce41d

File tree

8 files changed

+35
-18
lines changed

8 files changed

+35
-18
lines changed

packages/@angular/cli/models/config/config.ts

+11-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import * as fs from 'fs';
22
import * as path from 'path';
3-
import * as ts from 'typescript';
43
import { stripIndent } from 'common-tags';
54

65
import {SchemaClass, SchemaClassFactory} from '@ngtools/json-schema';
@@ -80,13 +79,22 @@ export class CliConfig<JsonType> {
8079
}
8180

8281
static fromConfigPath<T>(configPath: string, otherPath: string[] = []): CliConfig<T> {
83-
const configContent = ts.sys.readFile(configPath) || '{}';
8482
const schemaContent = fs.readFileSync(DEFAULT_CONFIG_SCHEMA_PATH, 'utf-8');
83+
let configContent = '{}';
84+
if (fs.existsSync(configPath)) {
85+
configContent = fs.readFileSync(configPath, 'utf-8') || '{}';
86+
}
87+
8588

8689
let otherContents = new Array<string>();
8790
if (configPath !== otherPath[0]) {
8891
otherContents = otherPath
89-
.map(path => ts.sys.readFile(path))
92+
.map(path => {
93+
if (fs.existsSync(path)) {
94+
return fs.readFileSync(path, 'utf-8');
95+
}
96+
return undefined;
97+
})
9098
.filter(content => !!content);
9199
}
92100

packages/@angular/cli/models/webpack-configs/browser.ts

+5-3
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,21 @@
11
import * as fs from 'fs';
22
import * as webpack from 'webpack';
33
import * as path from 'path';
4-
import * as ts from 'typescript';
54
const HtmlWebpackPlugin = require('html-webpack-plugin');
65
const SubresourceIntegrityPlugin = require('webpack-subresource-integrity');
76

87
import { packageChunkSort } from '../../utilities/package-chunk-sort';
98
import { BaseHrefWebpackPlugin } from '../../lib/base-href-webpack';
109
import { extraEntryParser, lazyChunksFilter } from './utils';
1110
import { WebpackConfigOptions } from '../webpack-config';
11+
import { requireProjectModule } from '../../utilities/require-project-module';
1212

1313

1414
export function getBrowserConfig(wco: WebpackConfigOptions) {
1515
const { projectRoot, buildOptions, appConfig } = wco;
1616

17+
const projectTs = requireProjectModule(projectRoot, 'typescript');
18+
1719
const appRoot = path.resolve(projectRoot, appConfig.root);
1820

1921
let extraPlugins: any[] = [];
@@ -78,8 +80,8 @@ export function getBrowserConfig(wco: WebpackConfigOptions) {
7880
}));
7981
}
8082

81-
const supportES2015 = wco.tsConfig.options.target !== ts.ScriptTarget.ES3
82-
&& wco.tsConfig.options.target !== ts.ScriptTarget.ES5;
83+
const supportES2015 = wco.tsConfig.options.target !== projectTs.ScriptTarget.ES3
84+
&& wco.tsConfig.options.target !== projectTs.ScriptTarget.ES5;
8385

8486
return {
8587
resolve: {

packages/@angular/cli/models/webpack-configs/production.ts

+5-3
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,14 @@ import * as path from 'path';
22
import * as webpack from 'webpack';
33
import * as fs from 'fs';
44
import * as semver from 'semver';
5-
import * as ts from 'typescript';
65
import { stripIndent } from 'common-tags';
76
import { LicenseWebpackPlugin } from 'license-webpack-plugin';
87
import { PurifyPlugin } from '@angular-devkit/build-optimizer';
98
import { StaticAssetPlugin } from '../../plugins/static-asset';
109
import { GlobCopyWebpackPlugin } from '../../plugins/glob-copy-webpack-plugin';
1110
import { WebpackConfigOptions } from '../webpack-config';
1211
import { readTsconfig } from '../../utilities/read-tsconfig';
12+
import { requireProjectModule } from '../../utilities/require-project-module';
1313

1414
const UglifyJSPlugin = require('uglifyjs-webpack-plugin');
1515

@@ -24,6 +24,8 @@ const UglifyJSPlugin = require('uglifyjs-webpack-plugin');
2424
export function getProdConfig(wco: WebpackConfigOptions) {
2525
const { projectRoot, buildOptions, appConfig } = wco;
2626

27+
const projectTs = requireProjectModule(projectRoot, 'typescript');
28+
2729
let extraPlugins: any[] = [];
2830
let entryPoints: { [key: string]: string[] } = {};
2931

@@ -124,8 +126,8 @@ export function getProdConfig(wco: WebpackConfigOptions) {
124126
// Read the tsconfig to determine if we should apply ES6 uglify.
125127
const tsconfigPath = path.resolve(projectRoot, appConfig.root, appConfig.tsconfig);
126128
const tsConfig = readTsconfig(tsconfigPath);
127-
const supportES2015 = tsConfig.options.target !== ts.ScriptTarget.ES3
128-
&& tsConfig.options.target !== ts.ScriptTarget.ES5;
129+
const supportES2015 = tsConfig.options.target !== projectTs.ScriptTarget.ES3
130+
&& tsConfig.options.target !== projectTs.ScriptTarget.ES5;
129131

130132
return {
131133
entry: entryPoints,

packages/@angular/cli/models/webpack-configs/server.ts

+6-3
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,16 @@
11
import { WebpackConfigOptions } from '../webpack-config';
2-
import * as ts from 'typescript';
2+
import { requireProjectModule } from '../../utilities/require-project-module';
33

44
/**
55
* Returns a partial specific to creating a bundle for node
66
* @param wco Options which are include the build options and app config
77
*/
88
export function getServerConfig(wco: WebpackConfigOptions) {
9-
const supportES2015 = wco.tsConfig.options.target !== ts.ScriptTarget.ES3
10-
&& wco.tsConfig.options.target !== ts.ScriptTarget.ES5;
9+
10+
const projectTs = requireProjectModule(wco.projectRoot, 'typescript');
11+
12+
const supportES2015 = wco.tsConfig.options.target !== projectTs.ScriptTarget.ES3
13+
&& wco.tsConfig.options.target !== projectTs.ScriptTarget.ES5;
1114

1215
const config: any = {
1316
resolve: {

packages/@angular/cli/package.json

-1
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,6 @@
7373
"style-loader": "^0.13.1",
7474
"stylus": "^0.54.5",
7575
"stylus-loader": "^3.0.1",
76-
"typescript": ">=2.0.0 <2.6.0",
7776
"uglifyjs-webpack-plugin": "1.0.0",
7877
"url-loader": "^0.6.2",
7978
"webpack": "~3.8.1",

packages/@angular/cli/tasks/eject.ts

+2-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import * as fs from 'fs';
22
import * as path from 'path';
3-
import * as ts from 'typescript';
43
import * as webpack from 'webpack';
54
import chalk from 'chalk';
65

@@ -511,7 +510,7 @@ export default Task.extend({
511510
})
512511
// Read the package.json and update it to include npm scripts. We do this first so that if
513512
// an error already exists
514-
.then(() => ts.sys.readFile('package.json'))
513+
.then(() => fs.readFileSync('package.json', 'utf-8'))
515514
.then((packageJson: string) => JSON.parse(packageJson))
516515
.then((packageJson: any) => {
517516
const scripts = packageJson['scripts'];
@@ -587,7 +586,7 @@ export default Task.extend({
587586

588587
return writeFile('package.json', JSON.stringify(packageJson, null, 2) + '\n');
589588
})
590-
.then(() => JSON.parse(ts.sys.readFile(tsConfigPath)))
589+
.then(() => JSON.parse(fs.readFileSync(tsConfigPath, 'utf-8')))
591590
.then((tsConfigJson: any) => {
592591
if (!tsConfigJson.exclude || force) {
593592
// Make sure we now include tests. Do not touch otherwise.

packages/@angular/cli/tasks/lint.ts

+2
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
// We only use typescript for type information here.
2+
// @ignoreDep typescript
13
import chalk from 'chalk';
24
import * as fs from 'fs';
35
import * as glob from 'glob';

packages/@angular/cli/utilities/read-tsconfig.ts

+4-2
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
import * as path from 'path';
22
import * as ts from 'typescript';
3+
import { requireProjectModule } from '../utilities/require-project-module';
34

45
export function readTsconfig(tsconfigPath: string) {
5-
const configResult = ts.readConfigFile(tsconfigPath, ts.sys.readFile);
6-
const tsConfig = ts.parseJsonConfigFileContent(configResult.config, ts.sys,
6+
const projectTs = requireProjectModule(path.dirname(tsconfigPath), 'typescript');
7+
const configResult = projectTs.readConfigFile(tsconfigPath, ts.sys.readFile);
8+
const tsConfig = projectTs.parseJsonConfigFileContent(configResult.config, ts.sys,
79
path.dirname(tsconfigPath), undefined, tsconfigPath);
810
return tsConfig;
911
}

0 commit comments

Comments
 (0)