如何使用package.json中的“version”属性作为grunt中应用程序的目录?

时间:2013-10-01 11:31:12

标签: node.js angularjs gruntjs

我正在管理一个用angularjs编写的项目,使用默认目录结构,不包括使用版本控制的app目录(即“app / 0.0.0 /”,“app / 0.1.0 /”等...)

我正在尝试使用grunt的package.json文件的“version”属性来加载正确的 目录,所以我不必手动更改gruntfile.js中的应用程序路径 但出于某种原因,当我运行“grunt服务器”时,我一直得到“无法获取/”。

为了更好地解释这一点,这里是我的gruntfile.js示例:

var yeomanConfig = {
app: 'app/<% pkg.version %>/',
dist: 'dist'
...

grunt.initConfig({
  yeoman: yeomanConfig,
  pkg: grunt.file.readJSON('package.json'),
...

如果我手动将app属性更改为“app / 0.0.0”,它就像魅力一样 所以我猜这与模板有关。

有什么想法吗?

非常感谢您的帮助。

编辑:感谢您对Andreas和Matjaz的更正,但这并没有解决问题并给出了同样的错误...... 这解决了我的问题,但没有模板系统:

var pkgVersion = grunt.file.readJSON('package.json').version;
// configurable paths
var yeomanConfig = {
  app: 'app/'+pkgVersion,
  dist: 'dist'
};

这很丑陋但是很有效。希望得到适当的解决方案。

3 个答案:

答案 0 :(得分:13)

处理上述场景的最佳方法是,在grunt.initConfig中定义package.json

grunt.initConfig({
  pkg: grunt.file.readJSON("package.json")
})

一旦上面初始化,您可以在整个grunt.js文件中使用package.json的属性。

<%= pkg.version %>
<%= pkg.homepage %>

答案 1 :(得分:3)

使用<%=来回显数据:

<%= pkg.version %>

答案 2 :(得分:2)

我使用名称和版本扩展appConfig

var appConfig = {
    app: require('./bower.json').appPath || 'app',
    name: require('./package.json').name || 'angularapp',
    version: require('./package.json').version || '1.0.0',
    dist: 'dist'
};

然后你可以访问这样的变量:

<%= yeoman.name %>
<%= yeoman.version %>

对我来说是一个带有可选后备的干净解决方案。