Файлы машинописи TypeScript не создаются и не копируются
Когда я бегу tsc
из командной строки мой .js
, .map
, а также .d.ts
файлы созданы:
C:\Users\{user}\Documents\My Projects\BEPS\angular2-soap>tsc -version
Version 1.8.10
... но когда я призываю следующее Gulp
Функция все работает за исключением того, что .d.ts
файлы не создаются / копируются в ./app/
каталог:
gulp.task('compile-typescript', function () {
var sourcemaps = require('gulp-sourcemaps');
var typescript = require('gulp-typescript');
var typescriptCompiler = typescript({typescript: require('typescript')});
var typescriptProject = typescript(typescript.createProject('tsconfig.json'));
var tsResults = gulp.src(['!./src/**/spec*.ts', './src/**/*.ts'])
.pipe(typescriptProject)
.pipe(sourcemaps.init())
.pipe(sourcemaps.write('../map/'))
.pipe(gulp.dest('./app/'))
.pipe(typescriptCompiler).dts.pipe(gulp.dest('./app/'));
return tsResults;
});
фрагмент из моего package.json
файл:
"devDependencies": {
"autoprefixer": "6.3.6",
"concurrently": "2.0.0",
"cssnano": "3.5.2",
"del": "2.2.0",
"gulp": "3.9.1",
"gulp-ext-replace": "0.3.0",
"gulp-imagemin": "2.4.0",
"gulp-postcss": "6.1.0",
"gulp-sourcemaps": "1.6.0",
"gulp-typescript": "2.13.0",
"http-server": "0.9.0",
"jasmine-core": "2.4.1",
"karma": "0.13.22",
"karma-chrome-launcher": "0.2.3",
"karma-jasmine": "0.3.8",
"karma-spec-reporter": "0.0.26",
"lite-server": "2.2.0",
"postcss": "5.0.19",
"postcss-scss": "0.1.7",
"precss": "^1.3.0",
"run-sequence": "1.1.5",
"systemjs": "0.19.26",
"typescript": "latest",
"typings": "0.8.1"
},
мой tsconfig.json
файл:
{
"compileOnSave": true,
"compilerOptions": {
"target": "ES5",
"module": "System",
"moduleResolution": "node",
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"removeComments": true,
"noImplicitAny": true,
"declaration": true,
"sourceMap": true,
"mapRoot": "map/",
"diagnostics": true
},
"exclude": [
"node_modules",
"typings"
]
}
Я думал, что все, что мне нужно было сделать, это использовать dts
канал для отправки набираемых файлов ./app/
Что я пропускаю / делаю неправильно? Спасибо!
Попытка применить предложение от t34t5:
gulp.task('compile-typescript', function () {
var sourcemaps = require('gulp-sourcemaps');
var typescript = require('gulp-typescript');
var project = typescript.createProject('tsconfig.json', {declaration: true});
var merge = require('merge2');
var tsResults = gulp.src(['!./src/**/spec*.ts', './src/**/*.ts'])
.pipe(sourcemaps.init())
.pipe(typescript(project))
.pipe(sourcemaps.write('../map/'));
return merge([
tsResults.dts.pipe(gulp.dest('./app/')),
tsResults.js.pipe(gulp.dest('./app/'))
]);
});
Я получаю ошибку при доступе tsResults.dts
:
TypeError: Cannot read property 'pipe' of undefined
Я думаю, что sourcemaps
поток - это то, что используется (не typescript
поток)... это имеет смысл? если так, что я могу сделать, чтобы это исправить?
Следующее генерирует как .js
а также .d.ts
файлы - потому что он не пытается также генерировать .map
файлы:
gulp.task('compile-typescript', function () {
var typescript = require('gulp-typescript');
var project = typescript.createProject('tsconfig.json', {declaration: true});
var merge = require('merge2');
var tsResults = gulp.src(['!./src/**/spec*.ts', './src/**/*.ts'])
.pipe(typescript(project));
return merge([
tsResults.dts.pipe(gulp.dest('./app/')),
tsResults.js.pipe(gulp.dest('./app/'))
]);
});
4 ответа
Следующее достигает того эффекта, который я ищу - но это требует .ts
исходные файлы должны быть скомпилированы дважды (один раз для генерации .js
а также .map
файлы и один раз для генерации .d.ts
файлы)
gulp.task('compile-typescript', function () {
var sourcemaps = require('gulp-sourcemaps');
var typescript = require('gulp-typescript');
var merge = require('merge2');
var src = gulp.src(['!./src/**/spec*.ts', './src/**/*.ts']);
var dst = gulp.dest('./app/');
var jsMap = src.pipe(typescript(typescript.createProject('tsconfig.json')))
.pipe(sourcemaps.init())
.pipe(sourcemaps.write('../map/'));
var dts = src.pipe(typescript(typescript.createProject('tsconfig.json')));
return merge([
jsMap.pipe(dst), // writes .js and .map files
dts.dts.pipe(dst) // writes .d.ts files
]);
});
Я недоволен этим подходом из-за избыточности - предложения по оптимизации приветствуются.
Я думаю, что вам нужно будет использовать что-то типа слияния для записи файлов js и файлов определения типов. Возможно, я ошибаюсь, но я считаю, что поток закрывается после вашего первого gulp.dest(), поэтому через канал dts ничего не отправляется. Взгляните на файл readme для gulp машинописи. Под основным разделом использования.
ОБНОВЛЕНИЕ: я смог заставить следующее работать с вашим файлом tsconfig. Я только использовал единственный исходный файл машинописного текста все же. Это сгенерировало файлы.js,.d.ts и.map.
gulp.task('compile-typescript', function () {
var typescript = require('gulp-typescript');
var project = typescript.createProject('tsconfig.json', {declaration: true});
var merge = require('merge2');
var tsResults = gulp.src(['!./src/**/spec*.ts', './src/**/*.ts'])
.pipe(sourcemaps.init())
.pipe(typescript(project);
return merge([
tsResults.dts.pipe(gulp.dest('./app/')),
tsResults.js.pipe(sourcemaps.write('./app/')).pipe(gulp.dest('./app/'))
)]
});
У вас должен быть один компилятор машинописи, а не два.
var typescriptProject = typescript.createProject('tsconfig.json', {
typescript: require('typescript'),
declaration: true,
});
var tsResults = gulp.src(['!./src/**/spec*.ts', './src/**/*.ts'])
.pipe(sourcemaps.init())
.pipe(typescript(typescriptProject))
.pipe(sourcemaps.write('../map/'))
.pipe(gulp.dest('./app/'));
Я думаю, вы можете сделать это за один шаг без слияния. Это работает для меня и производит все.js
,.d.ts
иjs.map
файлы:
const tsp = ts.createProject("tsconfig.json");
gulp.task('transpile-src', () =>
tsp
.src()
.pipe(sourcemaps.init())
.pipe(tsp())
.pipe(
sourcemaps.write('.', {
includeContent: false,
sourceRoot: file => {
return file.cwd + '/src';
},
})
)
.pipe(gulp.dest('dist/src'))
);