<%= %> Gruntfile 中的变量语法抛出 "unable to read"
<%= %> variable syntax in Gruntfile throws "unable to read"
我在我的 Gruntfile 中使用了以下内容:
grunt.initConfig({
assets: grunt.option('assets'),
config: grunt.file.readJSON(path.join('<%= assets %>', 'config.json')) || grunt.file.readJSON('./defaults.json'),
...
})
当我执行它时,它抛出:
>> Error: Unable to read "<%= assets %>/config.json" file (Error code: ENOENT).
>> at Object.util.error (/.../prj/node_modules/grunt-legacy-util/index.js:54:39)
>> at Object.file.read (/.../prj/node_modules/grunt/lib/grunt/file.js:247:22)
>> at Object.file.readJSON (/.../prj/node_modules/grunt/lib/grunt/file.js:253:18)
>> at Object.module.exports (/.../prj/Gruntfile.js:10:28)
>> at loadTask (/.../prj/node_modules/grunt/lib/grunt/task.js:325:10)
>> at Task.task.init (/.../prj/node_modules/grunt/lib/grunt/task.js:437:5)
>> at Object.grunt.tasks (/.../prj/node_modules/grunt/lib/grunt.js:120:8)
>> at Object.module.exports [as cli] (/.../prj/node_modules/grunt/lib/grunt/cli.js:38:9)
>> at Object.<anonymous> (/usr/local/lib/node_modules/grunt-cli/bin/grunt:45:20)
>> at Module._compile (module.js:425:26)
想知道这是否是因为 assets
var 在我尝试使用它时未定义?还是不允许以这种方式使用 <%= %> 语法?
根据 this answer,它看起来应该可以工作——我发现这是因为之前我只是使用 var assets = grunt.option('assets')
,但是 that 正在抛出SyntaxError: Unexpected token var
出于某种原因。 (在我搞砸之前,它看起来像这样:)
module.exports = function(grunt) {
require('load-grunt-tasks')(grunt)
var util = require('util'),
path = require('path'),
pkg = require('./package.json')
var assets = grunt.option('assets'),
var config = grunt.file.readJSON(path.join(assets, 'config.json')) || grunt.file.readJSON('./defaults.json')
grunt.initConfig({
...
})
像这样使用模块或在 grunt 文件中声明变量的正确、grunt 方式是什么? And/or,我可以用 Unexpected token var
解决问题吗?
(注意: 这不是我在加载时遇到问题的配置文件,而是来自 grunt.option()
的资产路径似乎无法解释的事实)
您不能在 grunt.init( {
大括号内声明 var assets = ..
,因为那不是有效的 JS 语法。为了让它理解 <%= %>
语法,你需要做的是像这样声明它:
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
uglify: {
options: {
banner: '/*! <%= pkg.name %>'
// pkg is a property on the json object passed into initConfig
...
您似乎想阅读自定义 json 文件。请记住,即使是 grunt 脚本也只是 JavaScript 并且节点需要工作得很好。所以你可以做类似
的事情
var conf = grunt.file.exists(assets + '/ '+ 'config.json') ? require(assets + '/ '+ 'config.json') : {};
然后您可以在任何地方使用您的 config
变量。
conf.foo || 'default'
conf.bar
无论哪种情况,您都需要在使用前声明 assets
变量。在要求或 initConfig
Update
此外,
在 var assets = grunt.option('assets'),
之后有一个额外的逗号要么删除它,要么在下一行
中删除 var
<%= %>
是grunt指定的插值字符串,如果你在非grunt参数中使用它,它不会被插值(比如你在path.join中使用它的情况)。
要使其正常工作,您必须使用
grunt.template.process('<%= asset %>', {
data: {
assets: grunt.option('assets')
}
})
我在我的 Gruntfile 中使用了以下内容:
grunt.initConfig({
assets: grunt.option('assets'),
config: grunt.file.readJSON(path.join('<%= assets %>', 'config.json')) || grunt.file.readJSON('./defaults.json'),
...
})
当我执行它时,它抛出:
>> Error: Unable to read "<%= assets %>/config.json" file (Error code: ENOENT).
>> at Object.util.error (/.../prj/node_modules/grunt-legacy-util/index.js:54:39)
>> at Object.file.read (/.../prj/node_modules/grunt/lib/grunt/file.js:247:22)
>> at Object.file.readJSON (/.../prj/node_modules/grunt/lib/grunt/file.js:253:18)
>> at Object.module.exports (/.../prj/Gruntfile.js:10:28)
>> at loadTask (/.../prj/node_modules/grunt/lib/grunt/task.js:325:10)
>> at Task.task.init (/.../prj/node_modules/grunt/lib/grunt/task.js:437:5)
>> at Object.grunt.tasks (/.../prj/node_modules/grunt/lib/grunt.js:120:8)
>> at Object.module.exports [as cli] (/.../prj/node_modules/grunt/lib/grunt/cli.js:38:9)
>> at Object.<anonymous> (/usr/local/lib/node_modules/grunt-cli/bin/grunt:45:20)
>> at Module._compile (module.js:425:26)
想知道这是否是因为 assets
var 在我尝试使用它时未定义?还是不允许以这种方式使用 <%= %> 语法?
根据 this answer,它看起来应该可以工作——我发现这是因为之前我只是使用 var assets = grunt.option('assets')
,但是 that 正在抛出SyntaxError: Unexpected token var
出于某种原因。 (在我搞砸之前,它看起来像这样:)
module.exports = function(grunt) {
require('load-grunt-tasks')(grunt)
var util = require('util'),
path = require('path'),
pkg = require('./package.json')
var assets = grunt.option('assets'),
var config = grunt.file.readJSON(path.join(assets, 'config.json')) || grunt.file.readJSON('./defaults.json')
grunt.initConfig({
...
})
像这样使用模块或在 grunt 文件中声明变量的正确、grunt 方式是什么? And/or,我可以用 Unexpected token var
解决问题吗?
(注意: 这不是我在加载时遇到问题的配置文件,而是来自 grunt.option()
的资产路径似乎无法解释的事实)
您不能在 grunt.init( {
大括号内声明 var assets = ..
,因为那不是有效的 JS 语法。为了让它理解 <%= %>
语法,你需要做的是像这样声明它:
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
uglify: {
options: {
banner: '/*! <%= pkg.name %>'
// pkg is a property on the json object passed into initConfig
...
您似乎想阅读自定义 json 文件。请记住,即使是 grunt 脚本也只是 JavaScript 并且节点需要工作得很好。所以你可以做类似
的事情 var conf = grunt.file.exists(assets + '/ '+ 'config.json') ? require(assets + '/ '+ 'config.json') : {};
然后您可以在任何地方使用您的 config
变量。
conf.foo || 'default'
conf.bar
无论哪种情况,您都需要在使用前声明 assets
变量。在要求或 initConfig
Update
此外,
在 var assets = grunt.option('assets'),
之后有一个额外的逗号要么删除它,要么在下一行
var
<%= %>
是grunt指定的插值字符串,如果你在非grunt参数中使用它,它不会被插值(比如你在path.join中使用它的情况)。
要使其正常工作,您必须使用
grunt.template.process('<%= asset %>', {
data: {
assets: grunt.option('assets')
}
})