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.

Надеюсь это поможет?

Другие вопросы по тегам