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
文件中。
我最近开始探索 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
文件中。