Grunt,云部署和编译文件

时间:2015-05-07 12:47:59

标签: node.js express gruntjs copy cloud

我最近开始探索咕噜声,我已经通过试用了 https://github.com/ng-vu/ng-express-boilerplate种子。

它使用gruntfile通过以下代码将静态资产,css,javascript复制到目标文件夹:

dist_js: {
    files: [{
        src: ['<%= app_files.js %>', '<%= vendor_files.js %>'],
        dest: '<%= dist_dir %>/public',
        cwd: '.',
        expand: true
     }]
}

其中dist_dir是'dist'。

现在在配置文件中指定在开发中我们要从其原始位置提供资产,src和供应商文件,因此express for development的配置如下:

app.use('/assets', express.static(path.resolve(__dirname, '../assets')));
app.use('/src', express.static(path.resolve(__dirname, '../../src')));
app.use('/vendor', express.static(path.resolve(__dirname, '../../vendor')));

在制作中,代码是:

app.use(express.static(path.join(__dirname, 'public')));

当我将其移至生产(特别是openhift)时,index.html模板将提供所有脚本和链接标记,但找不到脚本和css。我得到的是“不能GET file.css”,例如。

我运行grunt构建并在云上编译,输出是“完成,没有错误”,但文件无处可寻。我尝试了太多的东西,但我的想法已经用完了。我错过了一些关于咕噜声的基本信息吗?

编辑: 问题是执行路由的javascript文件位于src / server内,因此__dirname指向该位置。然而,Grunt在项目根目录中进行了复制。

app.use(express.static(path.join(__dirname, '../../dist/public')));

这解决了问题。

1 个答案:

答案 0 :(得分:0)

您需要使用路线公开您的资产。

app.use(express.static(path.join(__dirname, 'dist/public')));

运行npm install后,您需要修改package.json文件以调用grunt。为此,请添加以下内容。

"scripts": {
    "start": "node ./src/server/app.js",
    "postintall": "grunt build; grunt compile"
}

此外,定义一个结合了这两个任务的新grunt任务可能会很好。

<强> Gruntfile.js

grunt.registerTask("prep-for-cloud", [ "compile", "build" ]);

然后您的package.json将如下所示。

"scripts": {
    "start": "node ./src/server/app.js",
    "postintall": "grunt prep-for-cloud"
}

另外,您应该将grunt-cli作为依赖项添加到package.json文件中。