Grunt、云部署和编译文件

Grunt, cloud deployment and compiled files

我最近开始探索 g运行t 并且我通过尝试 https://github.com/ng-vu/ng-express-boilerplate 种子。

它使用 g运行t 文件将静态资产 css、javascript 复制到目标文件夹,代码如下:

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

其中 dist_dir 是 'dist'。

现在在配置文件中指定了在开发中我们要从它们的原始位置提供assets、src和vendor文件,所以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')));

当我将其移至生产环境(特别是 openshift)时,index.html 模板与所有脚本和 link 标签一起提供,但找不到脚本和 css .例如,我得到的是 'Cannot GET file.css'。

I 运行 g运行t 在云端构建编译,输出'Done, without errors',但是找不到文件。我已经尝试了太多东西,而且我 运行 没有想法。我是否遗漏了有关 g运行t 的一些基本知识?

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

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

这解决了问题。

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

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

您需要修改 package.json 文件以在 运行 npm 安装后调用 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 文件中。