Remove template build dynamic filename replacement. Working towards eliminating template build process completely.

This commit is contained in:
Steve Sanderson 2017-08-23 15:27:15 -07:00
Родитель 8d6119f31d
Коммит 45d645931b
61 изменённых файлов: 68 добавлений и 90 удалений

Просмотреть файл

@ -11,11 +11,11 @@
"preferNameDirectory": true,
"primaryOutputs": [
{
"path": "WebApplicationBasic.csproj"
"path": "AureliaSpa.csproj"
}
],
"shortName": "aurelia",
"sourceName": "WebApplicationBasic",
"sourceName": "AureliaSpa",
"sources": [
{
"source": "./",

Просмотреть файл

@ -9,7 +9,7 @@
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="#/home">WebApplicationBasic</a>
<a class="navbar-brand" href="#/home">AureliaSpa</a>
</div>
<div class="clearfix"></div>
<div class="navbar-collapse collapse">

Просмотреть файл

@ -5,7 +5,7 @@ using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
namespace WebApplicationBasic.Controllers
namespace AureliaSpa.Controllers
{
public class HomeController : Controller
{

Просмотреть файл

@ -4,7 +4,7 @@ using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
namespace WebApplicationBasic.Controllers
namespace AureliaSpa.Controllers
{
[Route("api/[controller]")]
public class SampleDataController : Controller

Просмотреть файл

@ -8,7 +8,7 @@ using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging;
namespace WebApplicationBasic
namespace AureliaSpa
{
public class Program
{

Просмотреть файл

@ -8,7 +8,7 @@ using Microsoft.AspNetCore.SpaServices.Webpack;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
namespace WebApplicationBasic
namespace AureliaSpa
{
public class Startup
{

Просмотреть файл

@ -3,7 +3,7 @@
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>@ViewData["Title"] - WebApplicationBasic</title>
<title>@ViewData["Title"] - AureliaSpa</title>
<base href="~/" />
<link rel="stylesheet" href="~/dist/vendor.css" asp-append-version="true" />

Просмотреть файл

@ -1,3 +1,3 @@
@using WebApplicationBasic
@using AureliaSpa
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
@addTagHelper *, Microsoft.AspNetCore.SpaServices

Просмотреть файл

@ -1,5 +1,5 @@
{
"name": "WebApplicationBasic",
"name": "AureliaSpa",
"version": "0.0.0",
"dependencies": {
"@types/webpack-env": {

Просмотреть файл

@ -1,5 +1,5 @@
{
"name": "WebApplicationBasic",
"name": "AureliaSpa",
"private": true,
"version": "0.0.0",
"dependencies": {

Просмотреть файл

@ -11,11 +11,11 @@
"preferNameDirectory": true,
"primaryOutputs": [
{
"path": "WebApplicationBasic.csproj"
"path": "KnockoutSpa.csproj"
}
],
"shortName": "knockout",
"sourceName": "WebApplicationBasic",
"sourceName": "KnockoutSpa",
"sources": [
{
"source": "./",

Просмотреть файл

@ -7,7 +7,7 @@
<span class='icon-bar'></span>
<span class='icon-bar'></span>
</button>
<a class='navbar-brand' href='/'>WebApplicationBasic</a>
<a class='navbar-brand' href='/'>KnockoutSpa</a>
</div>
<div class='clearfix'></div>
<div class='navbar-collapse collapse'>

Просмотреть файл

@ -5,7 +5,7 @@ using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
namespace WebApplicationBasic.Controllers
namespace KnockoutSpa.Controllers
{
public class HomeController : Controller
{

Просмотреть файл

@ -4,7 +4,7 @@ using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
namespace WebApplicationBasic.Controllers
namespace KnockoutSpa.Controllers
{
[Route("api/[controller]")]
public class SampleDataController : Controller

Просмотреть файл

@ -8,7 +8,7 @@ using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging;
namespace WebApplicationBasic
namespace KnockoutSpa
{
public class Program
{

Просмотреть файл

@ -8,7 +8,7 @@ using Microsoft.AspNetCore.SpaServices.Webpack;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
namespace WebApplicationBasic
namespace KnockoutSpa
{
public class Startup
{

Просмотреть файл

@ -3,7 +3,7 @@
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>@ViewData["Title"] - WebApplicationBasic</title>
<title>@ViewData["Title"] - KnockoutSpa</title>
<base href="~/" />
<link rel="stylesheet" href="~/dist/vendor.css" asp-append-version="true" />

Просмотреть файл

@ -1,3 +1,3 @@
@using WebApplicationBasic
@using KnockoutSpa
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
@addTagHelper *, Microsoft.AspNetCore.SpaServices

Просмотреть файл

@ -1,5 +1,5 @@
{
"name": "WebApplicationBasic",
"name": "KnockoutSpa",
"version": "0.0.0",
"dependencies": {
"@types/core-js": {

Просмотреть файл

@ -1,5 +1,5 @@
{
"name": "WebApplicationBasic",
"name": "KnockoutSpa",
"private": true,
"version": "0.0.0",
"devDependencies": {

Просмотреть файл

@ -11,11 +11,11 @@
"preferNameDirectory": true,
"primaryOutputs": [
{
"path": "WebApplicationBasic.csproj"
"path": "VueSpa.csproj"
}
],
"shortName": "vue",
"sourceName": "WebApplicationBasic",
"sourceName": "VueSpa",
"sources": [
{
"source": "./",

Просмотреть файл

@ -8,7 +8,7 @@
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="/">WebApplicationBasic</a>
<a class="navbar-brand" href="/">VueSpa</a>
</div>
<div class="clearfix"></div>
<div class="navbar-collapse collapse">

Просмотреть файл

@ -5,7 +5,7 @@ using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
namespace WebApplicationBasic.Controllers
namespace VueSpa.Controllers
{
public class HomeController : Controller
{

Просмотреть файл

@ -4,7 +4,7 @@ using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
namespace WebApplicationBasic.Controllers
namespace VueSpa.Controllers
{
[Route("api/[controller]")]
public class SampleDataController : Controller

Просмотреть файл

@ -8,7 +8,7 @@ using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging;
namespace WebApplicationBasic
namespace VueSpa
{
public class Program
{

Просмотреть файл

@ -8,7 +8,7 @@ using Microsoft.AspNetCore.SpaServices.Webpack;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
namespace WebApplicationBasic
namespace VueSpa
{
public class Startup
{

Просмотреть файл

@ -3,7 +3,7 @@
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>@ViewData["Title"] - WebApplicationBasic</title>
<title>@ViewData["Title"] - VueSpa</title>
<base href="~/" />
<link rel="stylesheet" href="~/dist/vendor.css" asp-append-version="true" />

Просмотреть файл

@ -1,3 +1,3 @@
@using WebApplicationBasic
@using VueSpa
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
@addTagHelper *, Microsoft.AspNetCore.SpaServices

Просмотреть файл

@ -1,5 +1,5 @@
{
"name": "WebApplicationBasic",
"name": "VueSpa",
"version": "0.0.0",
"dependencies": {
"@types/webpack-env": {

Просмотреть файл

@ -1,5 +1,5 @@
{
"name": "WebApplicationBasic",
"name": "VueSpa",
"private": true,
"version": "0.0.0",
"devDependencies": {

Просмотреть файл

@ -11,11 +11,11 @@
"preferNameDirectory": true,
"primaryOutputs": [
{
"path": "WebApplicationBasic.csproj"
"path": "AngularSpa.csproj"
}
],
"shortName": "angular",
"sourceName": "WebApplicationBasic",
"sourceName": "AngularSpa",
"sources": [
{
"source": "./",

Просмотреть файл

@ -7,7 +7,7 @@
<span class='icon-bar'></span>
<span class='icon-bar'></span>
</button>
<a class='navbar-brand' [routerLink]="['/home']">WebApplicationBasic</a>
<a class='navbar-brand' [routerLink]="['/home']">AngularSpa</a>
</div>
<div class='clearfix'></div>
<div class='navbar-collapse collapse'>

Просмотреть файл

@ -5,7 +5,7 @@ using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
namespace WebApplicationBasic.Controllers
namespace AngularSpa.Controllers
{
public class HomeController : Controller
{

Просмотреть файл

@ -4,7 +4,7 @@ using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
namespace WebApplicationBasic.Controllers
namespace AngularSpa.Controllers
{
[Route("api/[controller]")]
public class SampleDataController : Controller

Просмотреть файл

@ -8,7 +8,7 @@ using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging;
namespace WebApplicationBasic
namespace AngularSpa
{
public class Program
{

Просмотреть файл

@ -8,7 +8,7 @@ using Microsoft.AspNetCore.SpaServices.Webpack;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
namespace WebApplicationBasic
namespace AngularSpa
{
public class Startup
{

Просмотреть файл

@ -3,7 +3,7 @@
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>@ViewData["Title"] - WebApplicationBasic</title>
<title>@ViewData["Title"] - AngularSpa</title>
<base href="~/" />
<link rel="stylesheet" href="~/dist/vendor.css" asp-append-version="true" />

Просмотреть файл

@ -1,3 +1,3 @@
@using WebApplicationBasic
@using AngularSpa
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
@addTagHelper *, Microsoft.AspNetCore.SpaServices

Просмотреть файл

@ -1,5 +1,5 @@
{
"name": "WebApplicationBasic",
"name": "AngularSpa",
"version": "0.0.0",
"dependencies": {
"@angular/animations": {

Просмотреть файл

@ -1,5 +1,5 @@
{
"name": "WebApplicationBasic",
"name": "AngularSpa",
"private": true,
"version": "0.0.0",
"scripts": {

Просмотреть файл

@ -11,11 +11,11 @@
"preferNameDirectory": true,
"primaryOutputs": [
{
"path": "WebApplicationBasic.csproj"
"path": "ReactSpa.csproj"
}
],
"shortName": "react",
"sourceName": "WebApplicationBasic",
"sourceName": "ReactSpa",
"sources": [
{
"source": "./",

Просмотреть файл

@ -12,7 +12,7 @@ export class NavMenu extends React.Component<{}, {}> {
<span className='icon-bar'></span>
<span className='icon-bar'></span>
</button>
<Link className='navbar-brand' to={ '/' }>WebApplicationBasic</Link>
<Link className='navbar-brand' to={ '/' }>ReactSpa</Link>
</div>
<div className='clearfix'></div>
<div className='navbar-collapse collapse'>

Просмотреть файл

@ -5,7 +5,7 @@ using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
namespace WebApplicationBasic.Controllers
namespace ReactSpa.Controllers
{
public class HomeController : Controller
{

Просмотреть файл

@ -4,7 +4,7 @@ using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
namespace WebApplicationBasic.Controllers
namespace ReactSpa.Controllers
{
[Route("api/[controller]")]
public class SampleDataController : Controller

Просмотреть файл

@ -8,7 +8,7 @@ using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging;
namespace WebApplicationBasic
namespace ReactSpa
{
public class Program
{

Просмотреть файл

@ -8,7 +8,7 @@ using Microsoft.AspNetCore.SpaServices.Webpack;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
namespace WebApplicationBasic
namespace ReactSpa
{
public class Startup
{

Просмотреть файл

@ -3,7 +3,7 @@
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>@ViewData["Title"] - WebApplicationBasic</title>
<title>@ViewData["Title"] - ReactSpa</title>
<base href="~/" />
<link rel="stylesheet" href="~/dist/vendor.css" asp-append-version="true" />

Просмотреть файл

@ -1,3 +1,3 @@
@using WebApplicationBasic
@using ReactSpa
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
@addTagHelper *, Microsoft.AspNetCore.SpaServices

Просмотреть файл

@ -1,5 +1,5 @@
{
"name": "WebApplicationBasic",
"name": "ReactSpa",
"version": "0.0.0",
"dependencies": {
"@types/history": {

Просмотреть файл

@ -1,5 +1,5 @@
{
"name": "WebApplicationBasic",
"name": "ReactSpa",
"private": true,
"version": "0.0.0",
"devDependencies": {

Просмотреть файл

@ -11,11 +11,11 @@
"preferNameDirectory": true,
"primaryOutputs": [
{
"path": "WebApplicationBasic.csproj"
"path": "ReactReduxSpa.csproj"
}
],
"shortName": "reactredux",
"sourceName": "WebApplicationBasic",
"sourceName": "ReactReduxSpa",
"sources": [
{
"source": "./",

Просмотреть файл

@ -12,7 +12,7 @@ export class NavMenu extends React.Component<{}, {}> {
<span className='icon-bar'></span>
<span className='icon-bar'></span>
</button>
<Link className='navbar-brand' to={ '/' }>WebApplicationBasic</Link>
<Link className='navbar-brand' to={ '/' }>ReactReduxSpa</Link>
</div>
<div className='clearfix'></div>
<div className='navbar-collapse collapse'>

Просмотреть файл

@ -5,7 +5,7 @@ using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
namespace WebApplicationBasic.Controllers
namespace ReactReduxSpa.Controllers
{
public class HomeController : Controller
{

Просмотреть файл

@ -4,7 +4,7 @@ using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
namespace WebApplicationBasic.Controllers
namespace ReactReduxSpa.Controllers
{
[Route("api/[controller]")]
public class SampleDataController : Controller

Просмотреть файл

@ -8,7 +8,7 @@ using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging;
namespace WebApplicationBasic
namespace ReactReduxSpa
{
public class Program
{

Просмотреть файл

@ -8,7 +8,7 @@ using Microsoft.AspNetCore.SpaServices.Webpack;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
namespace WebApplicationBasic
namespace ReactReduxSpa
{
public class Startup
{

Просмотреть файл

@ -3,7 +3,7 @@
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>@ViewData["Title"] - WebApplicationBasic</title>
<title>@ViewData["Title"] - ReactReduxSpa</title>
<base href="~/" />
<link rel="stylesheet" href="~/dist/vendor.css" asp-append-version="true" />

Просмотреть файл

@ -1,3 +1,3 @@
@using WebApplicationBasic
@using ReactReduxSpa
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
@addTagHelper *, Microsoft.AspNetCore.SpaServices

Просмотреть файл

@ -1,5 +1,5 @@
{
"name": "WebApplicationBasic",
"name": "ReactReduxSpa",
"version": "0.0.0",
"dependencies": {
"@types/history": {

Просмотреть файл

@ -1,5 +1,5 @@
{
"name": "WebApplicationBasic",
"name": "ReactReduxSpa",
"private": true,
"version": "0.0.0",
"dependencies": {

Просмотреть файл

@ -9,18 +9,12 @@ import * as childProcess from 'child_process';
import * as targz from 'tar.gz';
const isWindows = /^win/.test(process.platform);
const textFileExtensions = ['.gitignore', '.config', '.cs', '.cshtml', '.csproj', '.html', '.js', '.json', '.jsx', '.md', '.nuspec', '.ts', '.tsx'];
const dotNetPackages = [
'Microsoft.DotNet.Web.Spa.ProjectTemplates',
'Microsoft.AspNetCore.SpaTemplates'
];
function isTextFile(filename: string): boolean {
return textFileExtensions.indexOf(path.extname(filename).toLowerCase()) >= 0
|| textFileExtensions.indexOf(path.basename(filename)) >= 0;
}
function writeFileEnsuringDirExists(root: string, filename: string, contents: string | Buffer) {
let fullPath = path.join(root, filename);
mkdirp.sync(path.dirname(fullPath));
@ -45,18 +39,9 @@ function applyContentReplacements(sourceContent: Buffer, contentReplacements: {
return new Buffer(sourceText, 'utf8');
}
function writeTemplate(sourceRoot: string, destRoot: string, contentReplacements: { from: RegExp, to: string }[], filenameReplacements: { from: RegExp, to: string }[]) {
function writeTemplate(sourceRoot: string, destRoot: string) {
listFilesExcludingGitignored(sourceRoot).forEach(fn => {
let sourceContent = fs.readFileSync(path.join(sourceRoot, fn));
if (isTextFile(fn)) {
sourceContent = applyContentReplacements(sourceContent, contentReplacements);
}
// Also apply replacements in filenames
filenameReplacements.forEach(replacement => {
fn = fn.replace(replacement.from, replacement.to);
});
writeFileEnsuringDirExists(destRoot, fn, sourceContent);
});
}
@ -93,20 +78,13 @@ function buildDotNetNewNuGetPackage(packageId: string) {
rimraf.sync(outputRoot);
// Copy template files
const sourceProjectName = 'WebApplicationBasic';
const projectGuid = '00000000-0000-0000-0000-000000000000';
const filenameReplacements = [
{ from: /.*\.csproj$/, to: `${sourceProjectName}.csproj` }
];
const contentReplacements = [];
const packageSourceRootDir = path.join('../', packageId);
const templatesInPackage = fs.readdirSync(path.join(packageSourceRootDir, 'Content'));
_.forEach(templatesInPackage, templateName => {
const templateSourceDir = path.join(packageSourceRootDir, 'Content', templateName);
const templateOutputDir = path.join(outputRoot, 'Content', templateName);
writeTemplate(templateSourceDir, templateOutputDir, contentReplacements, filenameReplacements);
writeTemplate(templateSourceDir, templateOutputDir);
});
// Create the .nuspec file