NodeJS / Typescript / grunt开发工作流程

时间:2014-05-17 16:21:36

标签: javascript node.js gruntjs typescript

我目前正在尝试使用NodeJS和typescript以及Grunt设置一个优秀且高效的开发环境。我想到了以下项目结构:

  • MyProject的
    • 客户端
      • LIB
      • 的index.html
    • 服务器
      • 路由
      • app.ts

现在我想使用Grunt实时编译我的* .ts文件。问题是我需要使用“--module amd”标志编译客户端源,使用“--module commonjs”标志编译服务器端源。有没有什么好方法可以实现这样的目标?我想到了一个类似于下面的gunt文件,但这不起作用:

grunt.initConfig({
    ts: {
        devServer: {
            src: ['server/**/*.ts'],
            watch: 'server',
            options: {
                module: 'commonjs',
                removeComments: false
            }
        },
        devClient: {
            src: ['client/**/*.ts'],
            watch: 'client',
            options: {
                module: 'amd',
                removeComments: false
            }
        }
    }
});
grunt.registerTask('default', ['ts:devServer', 'ts:devClient']);

编辑:使用此配置时,只有devServer任务正在运行,并且将开始观察服务器文件夹。因此,它永远不会到达客户端任务,因此不会检测到客户端更改。我希望看到这两个文件夹的方式,但使用不同的编译器选项编译(带有amd的客户端文件夹和带有commonjs的服务器文件夹)

欢迎任何想法或提示,谢谢!

1 个答案:

答案 0 :(得分:0)

由于我对grunt的一点经验,我可以建议你下面的一些代码:

grunt.initConfig({
        grunt.initConfig({
    ts: {
        devServer: {
            src: ['server/**/*.ts'],
           options: {
               module: 'commonjs',
               removeComments: false
           }
        },
       devClient: {
              src: ['client/**/*.ts'],
              options: {
                module: 'amd',
                removeComments: false
             }
        }
    },

    tsCompileTasks : {
            client: {
                    //what will you do for convert client ts
            },
            server: {
                    //what will you do for convert server ts
            }
    } 

    watch : {
             server: {
                    files: "<%= ts.devServer.src %>",
                    tasks: ["tsCompileTasks:server"],
                    options : "<%= ts.devServer.options %>"

             }
             client: {
                    files: "<%= ts.devClient.src %>",
                    tasks: ["tsCompileTasks:client"],
                    options : "<%= ts.devClient.options %>"
    }
}
});

grunt.registerTask('default', ['watch:server', 'watch:client']);

1 /。我认为registerTask有两个参数:(名称,[watchArray])。

2 /。在监视中:您定义监视文件,如果监视文件已更改,则将调用任务

所以,你应该输入一个&#34; watch&#34;如此配置。检查它的参数: https://github.com/gruntjs/grunt-contrib-watch

抱歉我的英语不好,解释不好。