0

我正在创建一个 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 生成过程?因为我认为我不需要它们,它使编译过程非常缓慢。

4

2 回答 2

1

以下配置应满足您的要求。它将忽略该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: falseexpand: true都已从options对象中删除。

  • files属性已替换为srcdest属性,其值分别设置为src/**/*.tsbuild/

生成的目录结构示例:

以下目录结构:

.
├── 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
│   └── ...
└── ...
于 2018-05-16T13:06:19.037 回答
0

您的项目中有 tsconfig.json 设置吗?

可能您需要在那里排除node_modules目录(请参阅文档:https ://www.typescriptlang.org/docs/handbook/tsconfig-json.html )。

然后,您可以在 grunt 配置中使用 tsconfig.json(请参阅入门部分: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 的最佳方式。

希望这可以帮助?

于 2018-05-16T09:59:55.097 回答