【发布时间】:2015-02-01 05:15:26
【问题描述】:
我刚刚了解到使用带有“less”的 Node.js 工具来生成自定义 Dojo Dijit 主题的能力。我下载了 Node,并且全局安装了不太像:
npm install -g less
然后更新 variables.less 和其他几个小部件 .less 文件,然后运行编译命令:
node compile.js
来自我的“claro”Dijit 主题目录副本。我从 Windows7 平台运行它。我从 CMD 窗口运行它,但之前也从我的 CYGWIN 窗口尝试过。由于找不到“less”模块的compile.js路径,它立即失败了:
less = require('../../../util/less/lib/less');
所以我在新下载的节点和npm文件夹中搜索,发现当我更改require调用以使用此路径时:
less = require('C:/Users/okorng/AppData/Roaming/npm/node_modules/less');
它走得更远了。它在那个位置找到了“less”模块,但是在调用解析第一个文件的过程中 compile.js 失败了:
new(less.Parser)({
paths: [path.dirname(fname)],
optimization: options.optimization,
filename: fname
}).parse(data, function(err, tree){
在放入一些调试console.log()语句之后,然后还弄清楚如何在Chrome浏览器中使用node-debug来让Chrome开发者工具调试脚本,我发现了对Parser的调用。 parse() 函数失败,“imports”变量出现“未定义”错误:
parse: function (str, callback, additionalData) {
var root, error = null, globalVars, modifyVars, preText = "";
globalVars = (additionalData && additionalData.globalVars) ? Parser.serializeVars(additionalData.globalVars) + '\n' : '';
modifyVars = (additionalData && additionalData.modifyVars) ? '\n' + Parser.serializeVars(additionalData.modifyVars) : '';
if (globalVars || (additionalData && additionalData.banner)) {
preText = ((additionalData && additionalData.banner) ? additionalData.banner : "") + globalVars;
imports.contentsIgnoredChars[fileInfo.filename] = preText.length;
}
str = str.replace(/\r\n/g, '\n');
// Remove potential UTF Byte Order Mark
str = preText + str.replace(/^\uFEFF/, '') + modifyVars;
---> imports.contents[fileInfo.filename] = str;
向控制台报告的错误是:
C:\Users\okorng\AppData\Roaming\npm\node_modules\less\lib\less\parser\parser.js:112
imports.contents[fileInfo.filename] = str;
^
TypeError: Cannot read property 'contents' of undefined
at Object.Parser.parse (C:\Users\okorng\AppData\Roaming\npm\node_modules\less\lib\less\parser\parser.js:112:20)
at C:\COMPASS\URS\trunk\dev\src\IBM\RAD\webapps\CompassThemesURS\WebContent\themes\html\commonurs\dojo\1.9.1\dijit\themes\jelam\compile.js:43:6
at fs.js:272:14
at Object.oncomplete (fs.js:108:15)
我看到“imports”变量是 less parser.js 文件中 Parser 构造函数中的参数之一:
var Parser = function Parser(context, imports, fileInfo) {
当我转储这些构造函数参数的值时,“imports”和“fileInfo”都未定义。
这个 Parser 构造函数是从 Dijit claro 主题附带的 compile.js 文件中调用的。那个 compile.js 文件有错误吗?我是否错过了在运行“node compile.js”命令之前我应该配置不同的东西?
任何帮助将不胜感激。我一直在网上搜索任何类似的编译错误,但到目前为止还没有找到任何人解释相同类型的问题。如果有任何进一步的信息可以告诉你,请告诉我。
提前致谢,
格雷戈
【问题讨论】: