Skip to content

Commit 30fd942

Browse files
authored
fix(build): re-add support for sourceDir (#1378)
1 parent a144db1 commit 30fd942

10 files changed

+51
-46
lines changed

addon/ng2/blueprints/ng2/files/__path__/test.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ Promise.all([
2929
);
3030
});
3131

32-
let testContext: any = require.context('../src', true, /\.spec\.ts/);
32+
let testContext: any = require.context('./', true, /\.spec\.ts/);
3333
function requireAll(requireContext: any) {
3434
return requireContext.keys().map(requireContext);
3535
}

addon/ng2/blueprints/ng2/files/__path__/tsconfig.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"compilerOptions": {
3-
"baseUrl":"./src",
3+
"baseUrl":"./",
44
"declaration": false,
55
"emitDecoratorMetadata": true,
66
"experimentalDecorators": true,

addon/ng2/models/webpack-build-common.ts

+7-6
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,33 @@
11
import * as webpack from 'webpack';
22
import {LoaderConfig, PathsPlugin} from '../utilities/ts-path-mappings-webpack-plugin';
3+
import { CliConfig } from './config';
34

45
const path = require('path');
56
const ForkCheckerPlugin = require('awesome-typescript-loader').ForkCheckerPlugin;
67
const CopyWebpackPlugin = require('copy-webpack-plugin');
78
const HtmlWebpackPlugin = require('html-webpack-plugin');
89

9-
export function getWebpackCommonConfig(projectRoot: string) {
10+
export function getWebpackCommonConfig(projectRoot: string, sourceDir: string) {
1011
const awesomeTypescriptLoaderConfig: LoaderConfig | any = {
1112
useWebpackText: true,
1213
useForkChecker: true,
13-
tsconfig: path.resolve(projectRoot, './src/tsconfig.json')
14+
tsconfig: path.resolve(projectRoot, `./${sourceDir}/tsconfig.json`)
1415
}
1516

1617
return {
1718
devtool: 'inline-source-map',
1819
resolve: {
1920
extensions: ['', '.ts', '.js'],
20-
root: path.resolve(projectRoot, './src'),
21+
root: path.resolve(projectRoot, `./${sourceDir}`),
2122
moduleDirectories: ['node_modules'],
2223
plugins: [
2324
new PathsPlugin(awesomeTypescriptLoaderConfig);
2425
]
2526
},
2627
context: path.resolve(__dirname, './'),
2728
entry: {
28-
main: [path.resolve(projectRoot, './src/main.ts')],
29-
polyfills: path.resolve(projectRoot, './src/polyfills.ts')
29+
main: [path.resolve(projectRoot, `./${sourceDir}/main.ts`)],
30+
polyfills: path.resolve(projectRoot, `./${sourceDir}/polyfills.ts`)
3031
},
3132
output: {
3233
path: path.resolve(projectRoot, './dist'),
@@ -69,7 +70,7 @@ export function getWebpackCommonConfig(projectRoot: string) {
6970
plugins: [
7071
new ForkCheckerPlugin(),
7172
new HtmlWebpackPlugin({
72-
template: path.resolve(projectRoot, 'src/index.html'),
73+
template: path.resolve(projectRoot, `./${sourceDir}/index.html`),
7374
chunksSortMode: 'dependency'
7475
}),
7576
new webpack.optimize.CommonsChunkPlugin({

addon/ng2/models/webpack-build-development.ts

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1+
import { CliConfig } from './config';
12
const path = require('path')
23

3-
export const getWebpackDevConfigPartial = function(projectRoot: string) {
4+
export const getWebpackDevConfigPartial = function(projectRoot: string, sourceDir: string) {
45
return {
56
debug: true,
67
devtool: 'cheap-module-source-map',
@@ -13,7 +14,7 @@ export const getWebpackDevConfigPartial = function(projectRoot: string) {
1314
tslint: {
1415
emitErrors: false,
1516
failOnHint: false,
16-
resourcePath: path.resolve(projectRoot, './src')
17+
resourcePath: path.resolve(projectRoot, `./${sourceDir}`)
1718
},
1819
node: {
1920
global: 'window',

addon/ng2/models/webpack-build-mobile.ts

+6-5
Original file line numberDiff line numberDiff line change
@@ -3,18 +3,19 @@ import * as path from 'path';
33
import * as OfflinePlugin from 'offline-plugin';
44
import * as CopyWebpackPlugin from 'copy-webpack-plugin';
55
import { PrerenderWebpackPlugin } from '../utilities/prerender-webpack-plugin.ts';
6+
import { CliConfig } from './config';
67

7-
export const getWebpackMobileConfigPartial = function (projectRoot: string) {
8+
export const getWebpackMobileConfigPartial = function (projectRoot: string, sourceDir: string) {
89
return {
910
plugins: [
1011
new CopyWebpackPlugin([
11-
{from: path.resolve(projectRoot, './src/icons'), to: path.resolve(projectRoot, './dist/icons')},
12-
{from: path.resolve(projectRoot, './src/manifest.webapp'), to: path.resolve(projectRoot, './dist')}
12+
{from: path.resolve(projectRoot, `./${sourceDir}/icons`), to: path.resolve(projectRoot, './dist/icons')},
13+
{from: path.resolve(projectRoot, `./${sourceDir}/manifest.webapp`), to: path.resolve(projectRoot, './dist')}
1314
]),
1415
new PrerenderWebpackPlugin({
1516
templatePath: 'index.html',
16-
configPath: path.resolve(projectRoot, './src/main-app-shell.ts'),
17-
appPath: path.resolve(projectRoot, './src')
17+
configPath: path.resolve(projectRoot, `./${sourceDir}/main-app-shell.ts`),
18+
appPath: path.resolve(projectRoot, `./${sourceDir}`)
1819
})
1920
]
2021
}

addon/ng2/models/webpack-build-production.ts

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
import * as webpack from 'webpack';
2+
import { CliConfig } from './config';
23

34
const path = require('path');
45
const webpackMerge = require('webpack-merge'); // used to merge webpack configs
56
const WebpackMd5Hash = require('webpack-md5-hash');
67
const CompressionPlugin = require("compression-webpack-plugin");
78

8-
export const getWebpackProdConfigPartial = function(projectRoot: string) {
9+
export const getWebpackProdConfigPartial = function(projectRoot: string, sourceDir: string) {
910
return {
1011
debug: false,
1112
devtool: 'source-map',
@@ -36,7 +37,7 @@ export const getWebpackProdConfigPartial = function(projectRoot: string) {
3637
tslint: {
3738
emitErrors: true,
3839
failOnHint: true,
39-
resourcePath: path.resolve(projectRoot, './src')
40+
resourcePath: path.resolve(projectRoot, `./${sourceDir}`)
4041
},
4142
htmlLoader: {
4243
minimize: true,

addon/ng2/models/webpack-build-test.ts

+7-6
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,18 @@
11
import * as webpack from 'webpack';
2+
import { CliConfig } from './config';
23

34
const path = require('path');
45

5-
export const getWebpackTestConfig = function(projectRoot: string) {
6+
export const getWebpackTestConfig = function(projectRoot: string, sourceDir: string) {
67
return {
78
devtool: 'inline-source-map',
89
context: path.resolve(__dirname, './'),
910
resolve: {
1011
extensions: ['', '.ts', '.js'],
11-
root: path.resolve(projectRoot, './src')
12+
root: path.resolve(projectRoot, `./${sourceDir}`)
1213
},
1314
entry: {
14-
test: path.resolve(projectRoot, './src/test.ts')
15+
test: path.resolve(projectRoot, `./${sourceDir}/test.ts`)
1516
},
1617
output: {
1718
path: './dist.test',
@@ -43,7 +44,7 @@ export const getWebpackTestConfig = function(projectRoot: string) {
4344
loader: 'awesome-typescript-loader',
4445
query: {
4546
useWebpackText: true,
46-
tsconfig: path.resolve(projectRoot, './src/tsconfig.json'),
47+
tsconfig: path.resolve(projectRoot, `./${sourceDir}/tsconfig.json`),
4748
module: "commonjs",
4849
target: "es5",
4950
useForkChecker: true,
@@ -62,7 +63,7 @@ export const getWebpackTestConfig = function(projectRoot: string) {
6263
{ test: /\.less$/, loaders: ['raw-loader', 'postcss-loader', 'less-loader'] },
6364
{ test: /\.scss$/, loaders: ['raw-loader', 'postcss-loader', 'sass-loader'] },
6465
{ test: /\.(jpg|png)$/, loader: 'url-loader?limit=128000'},
65-
{ test: /\.html$/, loader: 'raw-loader', exclude: [path.resolve(projectRoot, 'src/index.html')] }
66+
{ test: /\.html$/, loader: 'raw-loader', exclude: [path.resolve(projectRoot, `./${sourceDir}/index.html`)] }
6667
],
6768
postLoaders: [
6869
{
@@ -77,7 +78,7 @@ export const getWebpackTestConfig = function(projectRoot: string) {
7778
tslint: {
7879
emitErrors: false,
7980
failOnHint: false,
80-
resourcePath: 'src'
81+
resourcePath: `./${sourceDir}`
8182
},
8283
node: {
8384
global: 'window',

addon/ng2/models/webpack-config.ts

+7-5
Original file line numberDiff line numberDiff line change
@@ -24,13 +24,15 @@ export class NgCliWebpackConfig {
2424
private webpackMobileProdConfigPartial: any;
2525

2626
constructor(public ngCliProject: any, public environment: string) {
27-
this.webpackBaseConfig = getWebpackCommonConfig(this.ngCliProject.root);
28-
this.webpackDevConfigPartial = getWebpackDevConfigPartial(this.ngCliProject.root);
29-
this.webpackProdConfigPartial = getWebpackProdConfigPartial(this.ngCliProject.root);
27+
const sourceDir = CliConfig.fromProject().defaults.sourceDir;
28+
29+
this.webpackBaseConfig = getWebpackCommonConfig(this.ngCliProject.root, sourceDir);
30+
this.webpackDevConfigPartial = getWebpackDevConfigPartial(this.ngCliProject.root, sourceDir);
31+
this.webpackProdConfigPartial = getWebpackProdConfigPartial(this.ngCliProject.root, sourceDir);
3032

3133
if (CliConfig.fromProject().apps[0].mobile){
32-
this.webpackMobileConfigPartial = getWebpackMobileConfigPartial(this.ngCliProject.root);
33-
this.webpackMobileProdConfigPartial = getWebpackMobileProdConfigPartial(this.ngCliProject.root);
34+
this.webpackMobileConfigPartial = getWebpackMobileConfigPartial(this.ngCliProject.root, sourceDir);
35+
this.webpackMobileProdConfigPartial = getWebpackMobileProdConfigPartial(this.ngCliProject.root, sourceDir);
3436
this.webpackBaseConfig = webpackMerge(this.webpackBaseConfig, this.webpackMobileConfigPartial);
3537
this.webpackProdConfigPartial = webpackMerge(this.webpackProdConfigPartial, this.webpackMobileProdConfigPartial);
3638
}

addon/ng2/tasks/serve-webpack.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import {webpackDevServerOutputOptions} from '../models/';
22
import {NgCliWebpackConfig} from '../models/webpack-config';
33
import {ServeTaskOptions} from '../commands/serve';
4+
import { CliConfig } from '../models/config';
45

56
const path = require('path');
67
const chalk = require('chalk');
@@ -32,7 +33,7 @@ module.exports = Task.extend({
3233
}));
3334

3435
const webpackDevServerConfiguration: IWebpackDevServerConfigurationOptions = {
35-
contentBase: path.resolve(this.project.root, './src'),
36+
contentBase: path.resolve(this.project.root, `./${CliConfig.fromProject().defaults.sourceDir}`),
3637
historyApiFallback: true,
3738
stats: webpackDevServerOutputOptions,
3839
inline: true,

addon/ng2/tasks/test.js renamed to addon/ng2/tasks/test.ts

+14-17
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,22 @@
1-
/* jshint node: true */
2-
'use strict';
3-
4-
var Promise = require('ember-cli/lib/ext/promise');
5-
var Task = require('ember-cli/lib/models/task');
6-
var path = require('path');
7-
var webpackTestConfig = require('../models/webpack-build-test').getWebpackTestConfig;
1+
const Promise = require('ember-cli/lib/ext/promise');
2+
const Task = require('ember-cli/lib/models/task');
3+
const path = require('path');
4+
const webpackTestConfig = require('../models/webpack-build-test').getWebpackTestConfig;
85

96
// require dependencies within the target project
107
function requireDependency(root, moduleName) {
11-
var packageJson = require(path.join(root, 'node_modules', moduleName, 'package.json'));
12-
var main = path.normalize(packageJson.main);
8+
const packageJson = require(path.join(root, 'node_modules', moduleName, 'package.json'));
9+
const main = path.normalize(packageJson.main);
1310
return require(path.join(root, 'node_modules', moduleName, main));
1411
}
1512

16-
module.exports = Task.extend({
13+
module.exports = Task.extend({
1714
run: function (options) {
18-
var projectRoot = this.project.root;
15+
const projectRoot = this.project.root;
1916
return new Promise((resolve) => {
20-
21-
var karma = requireDependency(projectRoot, 'karma');
22-
var karmaConfig = path.join(projectRoot, this.project.ngConfig.test.karma.config);
17+
const karma = requireDependency(projectRoot, 'karma');
18+
const karmaConfig = path.join(projectRoot, this.project.ngConfig.test.karma.config);
19+
const testFile = `./${this.project.ngConfig.defaults.sourceDir}/test.ts`;
2320

2421
options.plugins = [
2522
require('karma-webpack'),
@@ -35,8 +32,8 @@ module.exports = Task.extend({
3532
// Add those details here.
3633

3734
// Single test entry file. Will run the test.ts bundle and track it.
38-
options.files = [{ pattern: './src/test.ts', watched: false }];
39-
options.preprocessors = { './src/test.ts': ['webpack','sourcemap'] };
35+
options.files = [{ pattern: testFile, watched: false }];
36+
options.preprocessors = { [testFile]: ['webpack','sourcemap'] };
4037
options.webpack = webpackTestConfig(projectRoot);
4138
options.webpackMiddleware = {
4239
noInfo: true, // Hide webpack output because its noisy.
@@ -60,7 +57,7 @@ module.exports = Task.extend({
6057
options.configFile = karmaConfig;
6158

6259
// :shipit:
63-
var karmaServer = new karma.Server(options, resolve);
60+
const karmaServer = new karma.Server(options, resolve);
6461
karmaServer.start();
6562
});
6663
}

0 commit comments

Comments
 (0)