Grunt генерирует новые node_modules
Я создаю конфигурацию grunt для компиляции всех моих файлов Typescript в Javascript. Я хочу сохранить все мои сгенерированные файлы Javascript в папке сборки, но также сохранить ту же структуру папок.
Пример:src/controllers/myController.ts
будет компилировать в: build/controllers/myController.js
Я создал конфигурацию grunt, которая делает именно это, но по некоторым причинам она также генерирует папку node_modules в каталоге сборки, и это занимает много времени. Мой конфиг grunt выглядит следующим образом:
module.exports = function(grunt) {
grunt.config.set('ts', {
dev: {
files: [
{
src: ['**/*.ts'],
dest: 'build/'
}
],
options: {
target: 'es5',
fast: 'watch',
comments: false,
sourceMap: false,
failOnTypeErrors: true,
flatten: false,
expand: true,
module: 'system',
moduleResolution: 'classic'
}
}
});
grunt.loadNpmTasks('grunt-ts');
};
Есть ли способ отключить процесс генерации node_modules? Потому что я не думаю, что они мне нужны, и это делает процесс компиляции невероятно медленным.
2 ответа
Следующая конфигурация должна соответствовать вашим требованиям. Это будет игнорировать node_modules
каталог и воспроизводить ту же структуру каталогов исходного кода (как в src/
), в результате build
каталог:
module.exports = function(grunt) {
grunt.config.set('ts', {
dev: {
options: {
rootDir: 'src/',
target: 'es5',
fast: 'watch',
comments: false,
sourceMap: false,
failOnTypeErrors: true,
module: 'system',
moduleResolution: 'classic'
},
src: 'src/**/*.ts',
dest: 'build/'
}
});
grunt.loadNpmTasks('grunt-ts');
};
Заметки:
rootDir
свойство было добавлено кoptions
объект и его значение установлено в'src/'
,И то и другое
flatten: false
а такжеexpand: true
были удалены изoptions
объект.files
собственность была заменена наsrc
а такжеdest
свойства с их значениями, установленными вsrc/**/*.ts
а такжеbuild/
соответственно.
Пример результирующей структуры каталогов:
Следующая структура каталогов:
.
├── src
│ ├── another-folder
│ │ └── quux.ts
│ ├── controllers
│ │ └── myController.ts
│ └── foo.ts
├── Gruntfile.js
├── node_modules
│ └── ...
└── ...
После запуска получится следующее $ grunt ts
:
.
├── build
│ ├── another-folder
│ │ └── quux.js
│ ├── controllers
│ │ └── myController.js
│ └── foo.js
├── src
│ ├── another-folder
│ │ └── quux.ts
│ ├── controllers
│ │ └── myController.ts
│ └── foo.ts
├── Gruntfile.js
├── node_modules
│ └── ...
└── ...
У вас есть проект tsconfig.json в вашем проекте?
Возможно, вам нужно исключить каталог node_modules (см. Документацию: https://www.typescriptlang.org/docs/handbook/tsconfig-json.html).
Затем вы можете использовать tsconfig.json в своем конфиге grunt (см. Раздел " Начало работы ": https://github.com/TypeStrong/grunt-ts).
module.exports = function(grunt) {
grunt.initConfig({
ts: {
default : {
tsconfig: './tsconfig.json'
}
}});
grunt.loadNpmTasks("grunt-ts");
grunt.registerTask("default", ["ts"]);
};
С соответствующим файлом tsconfig.json, например:
{
"include": [
"src/**/*.ts*"
],
"exclude": [
"node_modules"
],
"compilerOptions": {
"target": "ES5",
"fast": "watch,
"sourceMap": false,
"module": "system",
"removeComments": true,
"outDir": "build/",
"rootDir" ".",
...
}
}
Примечание. Использование tsconfig.json - лучший способ использовать TypeScript.
Надеюсь это поможет?