Javascript 从lodash和lodash/模板导入模板的区别?
从lodash导入“模板”是否有区别,如下所示:Javascript 从lodash和lodash/模板导入模板的区别?,javascript,templates,import,lodash,Javascript,Templates,Import,Lodash,从lodash导入“模板”是否有区别,如下所示: import { template } from 'lodash'; import template from 'lodash/template'; Object {escape: function} escape: function escape(string) __proto__: Object 或者像这样: import { template } from 'lodash'; import template from
import { template } from 'lodash';
import template from 'lodash/template';
Object {escape: function}
escape: function escape(string)
__proto__: Object
或者像这样:
import { template } from 'lodash';
import template from 'lodash/template';
Object {escape: function}
escape: function escape(string)
__proto__: Object
第一个备选方案工作正常,但当我在模板中使用其他lodash函数(如u.isString)时,第二个备选方案会抛出TypeError
未捕获的TypeError:\ u0.isString不是函数
评估时(评估时(template.js:225),:10:13)
如果我在eval中调试,uz(下划线)对象如下所示:
import { template } from 'lodash';
import template from 'lodash/template';
Object {escape: function}
escape: function escape(string)
__proto__: Object
除了一个转义函数外是否为空
我想使用lodash/core和cherrypick非核心函数,如“模板”,但这很难做到
环境:
- 网页1.13.0
- 巴别塔6.24.1
- 主干1.3.3
- 洛达斯4.17.4
const templateSettings = { imports: { _: _ } };
const processedTemplate = template(templateToProcess, templateSettings)(data);
以下是模板和模板设置的Lodash文档:
我仍然不知道为什么在使用cheerypicked模板导入时,下划线全局值在eval中为空,但是…对于碰巧遇到这种情况的任何其他人,即使是在2020年: Webpack、babel等,结合bastardize lodash(以及其他所有库),它们“预编译”。构建模板时,预期的对象实例和行为不可用。例如,
.forEach
可能会被“优化”为lodash\u forEach\u网页包\u导入的\u模块\u 0\u默认值
。因此,如果您试图在任何未“预编译”到同一babel脚本管道中的脚本中使用预期的lodash实例化“389;”,那么它将不可用(我认为这对于SPA是有意义的)
为了“使用”任何“优化”的行为,您需要显式地传入该行为。这样,当webpack和babel完成它们的工作时,正确的函数就会被投射到模板运行时中
var template = $('#template').html(),
compiled = _.template(template, { 'imports': { 'each': _.forEach } });
然后在模板中:
<% each(items, function(item) { %><li><%- item %></li><% }); %>
对于我来说从“lodash/template”导入模板不起作用:错误:节点\u modules\lodash.template\index.js未导出“默认值”