bem-site / bem-forum-content-ru

Content BEM forum for Russian speak users
MIT License
56 stars 6 forks source link

Как вы это дебажите? ;-) #191

Open qfox opened 9 years ago

qfox commented 9 years ago

Вижу на странице:

TypeError: Cannot read property '0' of undefined
    at __$b29.iterateItems__$69 (.../users-list.bemhtml.js:501:46)
    at __$b29.iterateItems__$69 (.../users-list.bemhtml.js:509:21)
    at __$b29 (.../users-list.bemhtml.js:513:9)
    at __$g2 (.../users-list.bemhtml.js:1028:24)
    at applyc (.../users-list.bemhtml.js:33:20)
    at __$b75 (.../users-list.bemhtml.js:809:5)
    at applyc (.../users-list.bemhtml.js:105:20)
    at __$lb__$160 (.../users-list.bemhtml.js:784:22)
    at __$b74 (.../users-list.bemhtml.js:787:7)
    at applyc (.../users-list.bemhtml.js:102:24)

Реально ли собирать sourcemaps и при таких выбросах резолвить файлы/строки вменяемо?

tadatuta commented 9 years ago

@zxqfox vi .../users-list.bemhtml.js +501 найти переменную рядом с [0], если этого уже не достаточно, подняться чуть выше — выяснить, в каком блоке проблема.

piece of cake ;)

apsavin commented 9 years ago

Вообще, если собирать xjst в dev-режиме, то дебажить намного проще. И sourcemaps создать проблемой не должно быть.

qfox commented 9 years ago

@apsavin Ммм, да. Я почему-то решил, что YENV все заруливает...

@tadatuta А что ты думаешь про добавить в генератор/бем-стаб проверку на !isProd к devMode: BEM*_ENV === 'development'?

tadatuta commented 9 years ago

@zxqfox я даже в девелопменте обычно собираю шаблоны в продакшен-режиме и переключаюсь на devMode только когда нужно подебажить что-то сложное, поэтому скорее против. но если ты пишешь какой-то динамический проект, предложу использовать nodemon и задавать переменные окружения через его конфиг — тогда ты не завязан на умолчания.

qfox commented 9 years ago

@tadatuta тогда я категорически за sourcemaps ;-) на морде тоже пригодится, в т.ч. при сборке в prod режиме

tadatuta commented 9 years ago

@zxqfox мы все за sourcemaps, но как раз для production-режима запилить их не так-то просто

qfox commented 9 years ago

@tadatuta А issue уже стоит? Там неоднозначность, конечно ;-(

image

Были бы тесткейсы с пониманием чо куда резолвить ;-)

tadatuta commented 9 years ago

@zxqfox есть вот такое

А про честные сорсмапы в пост призываются @indutny и @vkz

voischev commented 9 years ago

:+1: Дебажиться ок. Но конечно можно улучшить этот момент ;)

sefus commented 9 years ago

А если ошибка в bemjson?

SyntaxError: Unexpected token {
    at exports.techMixin.getCreateResult (/home/vagrant/bem/test-project/node_modules/bem/lib/techs/v2/bemdecl.js.js:18:37)
    at /home/vagrant/bem/test-project/node_modules/bem/lib/tech/v2.js:120:41
    at Array.map (native)
    at exports.Tech.INHERIT.getCreateResults (/home/vagrant/bem/test-project/node_modules/bem/lib/tech/v2.js:119:47)
    at exports.Tech.INHERIT.create (/home/vagrant/bem/test-project/node_modules/bem/lib/tech/v2.js:90:57)
    at exports.Tech.INHERIT.createByDecl (/home/vagrant/bem/test-project/node_modules/bem/lib/tech/v2.js:77:25)
    at /home/vagrant/bem/test-project/node_modules/bem/lib/commands/create.js:118:51
    at Array.map (native)
    at /home/vagrant/bem/test-project/node_modules/bem/lib/commands/create.js:117:40
    at Array.map (native)
    at Cmd. (/home/vagrant/bem/test-project/node_modules/bem/lib/commands/create.js:116:32)
    at /home/vagrant/bem/test-project/node_modules/bem/node_modules/coa/lib/cmd.js:483:22
    at _fulfilled (/home/vagrant/bem/test-project/node_modules/bem/node_modules/q/q.js:798:54)
    at self.promiseDispatch.done (/home/vagrant/bem/test-project/node_modules/bem/node_modules/q/q.js:827:30)
    at Promise.promise.promiseDispatch (/home/vagrant/bem/test-project/node_modules/bem/node_modules/q/q.js:760:13)
    at /home/vagrant/bem/test-project/node_modules/bem/node_modules/q/q.js:574:44
    at flush (/home/vagrant/bem/test-project/node_modules/bem/node_modules/q/q.js:108:17)
    at process._tickCallback (node.js:419:13)

Не указан даже файл в котором ошибка, не то что номер строки. Пропустил запятую и вынужден вчитываться в каждую строчку. Нет ли какого-то валидатора?

tadatuta commented 9 years ago

@sefus BEMJSON — это самый обычный JS, поэтому его валидировать можно любым валидатором JS от jslint/jshint до подсветки в IDE и запуска в консоли:

node -e "require('./desktop.bundles/index/index.bemjson.js')"

/Users/tadatuta/Sites/pr-stub-update/desktop.bundles/index/index.bemjson.js:12
    content : [
    ^^^^^^^
SyntaxError: Unexpected identifier
qfox commented 9 years ago

node -e "require('... ? Мусье знает толк... ;-) есть еще тема:

sh -c "node -e "\""require('child_process').execFile('node', ['-e', 'require(\'./index.bemjson.js\')'], console.log);\""
sefus commented 9 years ago

@tadatuta спасибо, node поможет. По крайней мере пока я правлю один файл.

qfox commented 9 years ago

@sefus Если sublime2,3 — то https://github.com/SublimeLinter/SublimeLinter3 + https://github.com/SublimeLinter/SublimeLinter-jshint + https://github.com/jshint/jshint