gpt4 book ai didi

javascript - EJS Lint 对象返回值

转载 作者:行者123 更新时间:2023-12-03 04:21:53 25 4
gpt4 key购买 nike

当我试图在 EJS 模板中查找语法错误时,我在 npm 存储库中发现了 ejs-lint 模块。我试图用它来识别模板代码中的语法错误。模块的 npm 文档 https://www.npmjs.com/package/ejs-lint (下面的 API 部分显示了用法)。我正在尝试通过这个运行我的脚本。 linting 脚本的代码:

/*
* For checking ejs scripts
*/
const ejs = require('ejs');
const path = require('path');
const fs = require('fs');
const syntax_checker = require('syntax-error');
const ejslint = require('ejs-lint');

function _template_loader (name){
/*
loads a template and passs it to the given callback
*/
return fs.readFileSync(__dirname+'/views/'+name+'.html', 'utf-8');
}
const _filename = 'index';
(function(){
// main checker
let mainnav_opts = {
langoptions: [
{
href: '#',
langcode: 'en',
langname: 'English',

},
]
};
let jumbo_opts = {
renderParticlesNum : 10
};
let index_opts = {
langoptions: [
{
href: '#',
langcode: 'en',
langname: 'English',

},
],
renderParticlesNum: 10,
};

let index_parsed = ejslint(_template_loader(_filename), index_opts);
let jumbo_parsed = ejslint(_template_loader(_filename), jumbo_opts);
let mainnav_parsed = ejslint(_template_loader(_filename), mainnav_opts);

console.log('Index: '+ (!index_parsed ? 'Passed' : 'Failed'));
console.log('Mainnavbar: '+ (!mainnav_parsed ? 'Passed' : 'Failed'));
console.log('Jumbotron: '+ (!jumbo_parsed ? 'Passed' : 'Failed'));
})();

根据文档,ejslint 函数应该返回一个节点语法错误对象(来自语法错误模块)。然而,我只是变得不确定。这是否意味着没有语法错误(我在页面中仍然遇到一些错误)?

编辑:为了使它更好,我包含了一个 ejs 部分,我认为它导致了错误:

<div id='indexjumbtrn' class='jumbotron'>
<div id='jumbo-bg-container'>
<!--
@ ejs : server sends the number of particles to create and render based on
some initial client heuristics
-->
<% var anim_win_width = document.getElementById('jumbo-bg-container').style.width; %>
<% var anim_win_height = document.getElementById('jumbo-bg-container').style.height; %>
<% function fillpart(){ %>
<% /* fills a particle color randomly */ %>
<% var r = parseInt(Math.floor(Math.random()*255+1)); %>
<% var g = parseInt(Math.floor(Math.random()*255+1)); %>
<% var b = parseInt(Math.floor(Math.random()*255+1)); %>
<% var a = parseFloat((Math.random()*(0.89-0.73)) + (0.73)).toPrecision(2); %>
<% return 'rgba(' + r + ',' + g + ',' + b + ',' + a +')'; %>
<% } %>
<% function randpos(mn, mx){ %>
<% return ((Math.random()*(mx-mn))+mn); %>
<% } %>
<object id='svgobj'>
<svg xmlns='http://www.w3.org/TR/SVG11' viewBox='0 0 450 450' id='dotbox'
width=<%= anim_win_width+'px' %> height=<%= anim_win_height+'px' %>>
<% if(renderParticlesNum !== undefined){ %>
<% var parts = renderParticlesNum; %>
<% parts.forEach(function(p){ %>
<% var fillv = ''+fillpart(); %>
<% var cx = parseInt(randpos(0, anim_win_width)); %>
<% var cy = parseInt(randpos(0, anim_win_height)); %>
<% var r = parseInt(randpos(10, 16)); %>
<% var partid = 'part-'+r(0, 120); %>
<g style='margin:5% 5% 5% 5%;' fill='white' width=24 height=24 id=<%= partid %>> >
<circle class='particle' fill=<%= fillv %> cx=<%= cx %>
cy=<%= cy %> r=<%= r %>></circle>
</g>
<% }); %>
<% } %>
</svg>
</object>
</div>
<div id='create-form' class='container'>
<h2 id='jumbotag'>Tag goes here</h2>
<p><a class='btn btn-primary' id='jumbobtn' href=<%= jumbolink %>>Try Now</a></p>
</div>
</div>

最佳答案

我刚才遇到了类似的问题,我相信当没有发现 linting 错误时,undefined 返回值是预期的。

正如您所说,ejs-lint 依赖于 syntax-error 进行错误检查。 documentation for syntax-error状态:

If src has a syntax error, return an error object err that can be printed or stringified.

If there are no syntax errors in src, return undefined.

类似地,如果您故意将语法错误放入 EJS 文件中作为健全性检查,您应该会得到一个错误对象。您还可以使用 ejslint CLI 命令手动检查文件。

当我测试您发布的部分代码时,我得到未定义

关于javascript - EJS Lint 对象返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43905858/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com