Ես հենց նոր իմացա Node.js գործիքը «պակասով» օգտագործելու ունակության մասին՝ անհատական Dojo Dijit թեմա ստեղծելու համար: Ես ներբեռնեցի Node-ը և գլոբալ մակարդակով տեղադրեցի ավելի քիչ նման՝
npm install -g less
այնուհետև թարմացրեց variables.less-ը և մի քանի այլ վիջեթի .less ֆայլեր, այնուհետև գործարկեց compile հրամանը.
node compile.js
«claro» Dijit թեմաների գրացուցակի իմ պատճենից: Ես այն աշխատում եմ Windows7 հարթակից: Ես այն աշխատում եմ CMD պատուհանից, բայց նախկինում այն փորձել էի նաև իմ CYGWIN պատուհանից: Անմիջապես այն ձախողվեց, քանի որ compile.js-ի ճանապարհը դեպի «պակաս» մոդուլը չգտնվեց.
less = require('../../../util/less/lib/less');
այնպես որ ես որոնեցի նոր ներբեռնված հանգույցում և npm թղթապանակներում և գտա, որ երբ ես փոխեցի այս ճանապարհն օգտագործելու պահանջվող զանգը.
less = require('C:/Users/okorng/AppData/Roaming/npm/node_modules/less');
այն ավելի հեռուն գնաց: Այն գտավ «պակաս» մոդուլն այդ վայրում, բայց հետո compile.js-ը չկարողացավ վերլուծել առաջին ֆայլը կանչի ժամանակ.
new(less.Parser)({
paths: [path.dirname(fname)],
optimization: options.optimization,
filename: fname
}).parse(data, function(err, tree){
Որոշ վրիպազերծման console.log() հայտարարություններ տեղադրելուց հետո, և հետո նաև պարզել եմ, թե ինչպես օգտագործել node-debug-ը Chrome բրաուզերի հետ, որպեսզի սկրիպտը կարգաբերվի Chrome-ի մշակողի գործիքի կողմից, ես գտա, որ զանգը դեպի Parser.parse() ֆունկցիան ձախողվում է «ներմուծում» փոփոխականի «չսահմանված» սխալով.
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)
և ես տեսնում եմ, որ «ներմուծում» փոփոխականը այն պարամետրերից մեկն է, որը գտնվում է Parser կոնստրուկտորում ավելի քիչ parser.js ֆայլում.
var Parser = function Parser(context, imports, fileInfo) {
և երբ ես դուրս եմ հանում այս կոնստրուկտորների արգումենտների արժեքները, և՛ «ներմուծումը», և՛ «fileInfo»-ն անորոշ են:
Այս Parser կոնստրուկտորը կանչվում է compile.js ֆայլից, որը եկել է Dijit claro թեմայով: Արդյո՞ք compile.js ֆայլը սխալ է: Արդյո՞ք ես բաց եմ թողել մի բան, որը ես պետք է այլ կերպ կարգավորեի մինչև «node compile.js» հրամանը գործարկելը:
Ցանկացած օգնություն մեծապես գնահատելի կլինի: Ես փնտրում էի ցանցում կոմպիլյացիայի նման սխալների համար, բայց մինչ այժմ չեմ գտել որևէ մեկին, ով բացատրի նույն տեսակի խնդիրը: Եթե կա որևէ լրացուցիչ տեղեկություն, որը ես կարող եմ ձեզ տալ, խնդրում եմ տեղեկացնել ինձ:
Նախապես շնորհակալություն,
Գրեգոր
../../../util/less/lib/less
-ըcompile.js
-ում արդեն հղում է կատարումless
-ի հատուկ տարբերակին, որը առաքվում է Dojo-իutil
փաթեթով, որը ներառված է Dojo-ի ամբողջական գործիքակազմում: Եթե ունեք ամբողջ գործիքակազմը,compile.js
-ը պետք է Just Work. 02.02.2015