在Angular Universal中使用lodash es的正确方法是什么?

在Angular Universal中使用lodash es的正确方法是什么?,angular,lodash,angular-universal,Angular,Lodash,Angular Universal,当我将从lodash到lodash es的导入替换时,Angular Universal server会中断。但是当我运行ng service时,一切都很好。我想使用lodash es,这样我就可以在我的角度SPA中挑选lodash函数并缩小束大小 我采取的步骤:npm卸载了lodash,npm安装了lodash es,并替换了我的导入,如下所示: ... externals: [ nodeExternals({ whitelist: [/^lodash-es/]

当我将从lodash到lodash es的导入替换时,Angular Universal server会中断。但是当我运行
ng service
时,一切都很好。我想使用lodash es,这样我就可以在我的角度SPA中挑选lodash函数并缩小束大小

我采取的步骤:npm卸载了lodash,npm安装了lodash es,并替换了我的导入,如下所示:

...
  externals: [
    nodeExternals({
      whitelist: [/^lodash-es/]
    })
  ],
...
From:
从“lodash”导入{find as_find}

至:
从“lodash es”导入{find as_find}

这是我收到的服务器错误:

/usr/src/app/node_modules/lodash-es/lodash.js:10
export { default as add } from './add.js';
^^^^^^
SyntaxError: Unexpected token export
    at createScript (vm.js:80:10)
    at Object.runInThisContext (vm.js:139:10)
    at Module._compile (module.js:599:28)
    at Object.Module._extensions..js (module.js:646:10)
    at Module.load (module.js:554:32)
    at tryModuleLoad (module.js:497:12)
    at Function.Module._load (module.js:489:3)
    at Module.require (module.js:579:17)
    at require (internal/module.js:11:18)
    at Object.<anonymous> (/usr/src/app/dist/server.js:246:18)
这是webpack.server.config.js(可能相关?):


Angular 2+是打字脚本。。因此,您需要使用下面的命令从npm安装@types/lodash

npm install --save @types/lodash
然后您需要在组件中导入它,如:

import * as lodash from 'lodash';
你可以像这样使用lodash

lodash.find()  etc...

正如David在对原始问题的评论中所建议的那样,解决方案是将lodash es列入白名单。具体来说,现在webpack.server.config.js如下所示:

...
  externals: [
    nodeExternals({
      whitelist: [/^lodash-es/]
    })
  ],
...

不,这会将整个库导入到我的组件中。我想通过解构来挑选lodash函数,以保持我的包很小。安装@types/lodash是一个很好的提示,但之后仍然不起作用;无耻的插头:我做了一个小图书馆,可以为你工作:。它有许多lodash函数(目前有42个),捆绑包要小得多。但它接受的论据不够灵活。但如果它对你有用,请检查它!请参阅该链接。试试白名单,知道了吗!我只是不得不把矿粉列入白名单。我发布了一个答案来补充细节。谢谢David。我在dev.to找到了这篇简洁的文章
...
  externals: [
    nodeExternals({
      whitelist: [/^lodash-es/]
    })
  ],
...