Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从lodash和lodash/模板导入模板的区别?_Javascript_Templates_Import_Lodash - Fatal编程技术网

Javascript 从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

从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 '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

我找到了一个解决方法,即在u.template中使用templateSettings.imports,基本上将lodash导入到模板处理评估中

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未导出“默认值”