Grunt генерирует новые node_modules - PullRequest
0 голосов
/ 16 мая 2018

Я создаю конфигурацию 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 ]

0 голосов
/ 16 мая 2018

Следующая конфигурация должна соответствовать вашим требованиям. Он игнорирует каталог 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
│   └── ...
└── ...
0 голосов
/ 16 мая 2018

У вас есть проект tsconfig.json в вашем проекте?

Вероятно, вам необходимо исключить каталог node_modules (см. Документацию: https://www.typescriptlang.org/docs/handbook/tsconfig-json.html).

. Затем вы можете использовать tsconfig.json в своей конфигурации grunt (см. * 1008).* начало работы раздел: 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.

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

...