gpt4 book ai didi

javascript - 通过将旧的 AngularJS 迁移到 TypeScript,在 require.js 上忽略导入

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

我想将旧的 AngularJS 应用程序从 JavaScript 迁移到 TypeScript。为了加载需求,我使用 require.js。因为我想与非 require.js 脚本兼容,所以我使用 umd 作为 module

例如我有这个文件。

customModule.ts

import angular = require('angular');

angular.module('customModule', []);

ma​​in.ts

import angular = require('angular');
import customModule = require('customModule');

angular
.module('app')
.factory('customFactory', ['customModule', class {
constructor(
private customModule
) { }

out() {
return this.customModule;
};
}]);

这将被转换为 JavaScript。

customModule.js

(function (factory) {
if (typeof module === "object" && typeof module.exports === "object") {
var v = factory(require, exports);
if (v !== undefined) module.exports = v;
}
else if (typeof define === "function" && define.amd) {
define(["require", "exports", "angular"], factory);
}
})(function (require, exports) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var angular = require("angular");
angular.module('customModule', []);
});

ma​​in.ts

(function (factory) {
if (typeof module === "object" && typeof module.exports === "object") {
var v = factory(require, exports);
if (v !== undefined) module.exports = v;
}
else if (typeof define === "function" && define.amd) {
define(["require", "exports", "angular"], factory);
}
})(function (require, exports) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var angular = require("angular");
angular
.module('app')
.factory('customFactory', ['customModule', (function () {
function class_1(customModule) {
this.customModule = customModule;
}
class_1.prototype.out = function () {
return this.customModule;
};
;
return class_1;
}())]);
});

如您所见,在 main.js 中有一个 define(["require", "exports", "angular"], factory) ;。但我期望 define(["require", "exports", "Angular", "customModule"],factory);

如果我将 main.ts 上的 return this.customModule; 替换为 return customModule; ,它将正确导出,但我想我不需要构造函数。 - 正如您在图片上看到的更改,我删除了构造函数,因为不需要它。

Changes of main.js after removing constructor

如果这个问题得到解决,我可以将我的模块与 TypeScript 一起使用,就像将它们与 JavaScript 一起使用一样 <3

最佳答案

TypeScript 编译器进行了优化,因此如果您有以下代码,就会发生神奇的事情......

import * as angular from 'angular';
import * as customModule from 'customModule';

angular
.module('app')
.factory('customFactory', ['customModule', class {
constructor(
private customModule
) { }

out() {
return this.customModule;
};
}]);

由于编译器看不到对 customModule 中任何内容的任何引用,因此它会优化导入。

您可以通过使用导入的模块或使用强制导入来修复它,如下所示:

import * as angular from 'angular';
import 'customModule'; // <-- FORCED

angular
.module('app')
.factory('customFactory', ['customModule', class {
constructor(
private customModule
) { }

out() {
return this.customModule;
};
}]);

关于javascript - 通过将旧的 AngularJS 迁移到 TypeScript,在 require.js 上忽略导入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46475574/

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