使用 SystemJS 的混合 AngularJS/Angular 应用程序中的 Lodash。我可以单独分配'_'吗?
Posted
技术标签:
【中文标题】使用 SystemJS 的混合 AngularJS/Angular 应用程序中的 Lodash。我可以单独分配\'_\'吗?【英文标题】:Lodash in hybrid AngularJS/Angular app using SystemJS. Can I separately assign '_'?使用 SystemJS 的混合 AngularJS/Angular 应用程序中的 Lodash。我可以单独分配'_'吗? 【发布时间】:2018-06-14 18:12:54 【问题描述】:我有一个使用 TypeScript 用 AngularJS 编写的混合应用程序,我最近将其转换为混合应用程序,以便在项目中也可以使用 Angular。我正在使用 SystemJS 进行模块加载。
转换后,我在 VS2015 中收到与 Lodash 相关的错误提示
'Cannot find name '_'
我查看了以下 SO 问题,但是没有一个建议的解决方案有效或看起来令人满意:
Importing lodash into angular2 + typescript application
Angular2 and lodash...Cannot find name
我尝试了上面第一个问题的主要建议,即:
删除节点模块文件夹,然后:
$ npm install --save lodash
$ npm install --save @types/lodash
Then, in my .ts file, I add this:
import * as _ from "lodash";
但这给了我错误'找不到模块'lodash'。
如果我使用以下内容,我不会收到该错误,但我仍然收到错误“找不到名称'_':
import "lodash";
我的问题是——现在有没有办法可以在我的代码中单独分配“_”来解决这个问题? (我真的想完全理解使用 import * as _ from "lodash" 的问题,即模块加载和'_'分配的细节是什么)
这是我得到错误的 *.ts 文件:
import "lodash";
(function ()
var controller = function ( dependency1, dependency2)
this.myFunction = (myParam) =>
this.MyService.getMyModel(myParam).then((model) =>
this.model = model.Content;
// can I assign _ so that it works here - if so where and how?
_.each(this.model.MyEntities, function (m) return m.showDetails = false; );
....
我的相关 tsconfig.json 编译器选项是:
"compilerOptions":
"target": "es5",
"module": "commonjs",
"moduleResolution": "node",
"lib": [ "es2015", "dom" ]
....
当我查看 C:\Program Files (x86)\Microsoft SDKs\TypeScript 时,我只有 1.8。当我咕哝这个项目(它使用https://www.npmjs.com/package/grunt-ts)时,它告诉我它正在使用我不理解的 tsc v2.6.2 进行编译。我认为VS2015必须使用tsc 1.8(我只有一个tsconfig.json,.csproj上没有Typescript配置)。
【问题讨论】:
【参考方案1】:对于 Visual Studio 在 TypeScript 1.8 上的问题,您需要下载新版本的 Visual Studio 的 TypeScript 插件。
您可以在 typescript website download page 上找到 Visual Studio 2015 和 2017 的详细信息
关于 lodash 问题,我遇到了类似的问题。对我来说,原因是 lodash 的导入方式存在不一致。当所有代码更改为引用 lodash 时,一切正常:
import * as _ from "lodash";
在我的例子中,所有代码都包括删除一个以不同方式引用 loadash 的第 3 方组件。我确实调试并找出了实际原因,但现在我不记得除了有效的解决方案之外的细节。
【讨论】:
谢谢,我的问题是版本不匹配,我知道 ts 2.6.2 不适用于 VS2015。再次查看您的链接,当我滚动浏览大量 Surface Pro 广告时,我找到了 VS2015 的 2.6.2 并安装了它,然后手动将我项目的 .csproj 文件中的 TypeScriptTools 版本更改为 2.6。现在 VS 看到 2.6.2,lodash 错误和我现在得到的所有其他错误由于某种原因消失了。我仍然对关于 TypeScript 分配的实际问题以及下划线如何被识别方面的实际情况感兴趣。以上是关于使用 SystemJS 的混合 AngularJS/Angular 应用程序中的 Lodash。我可以单独分配'_'吗?的主要内容,如果未能解决你的问题,请参考以下文章
使用 gulp-ng-annotate 和 gulp-systemjs-builder
构建混合 angular/angularjs 应用程序 - 如何在 angularjs 应用程序中加载 Angular 模块