gpt4 book ai didi

javascript - 使用 SystemJS 加载模块时如何摆脱 "default"属性?

转载 作者:搜寻专家 更新时间:2023-10-30 21:12:39 25 4
gpt4 key购买 nike

我有一个 AMD module我想加载 SystemJS .我能够做到这一点,但不幸的是我必须这样调用它:

var Logdown = module.default;
var instance = new Logdown('Test');

我想跳过对 .default 的调用,但我不知道如何摆脱这个属性。我认为这个 default 是由 SystemJS 加载器以某种方式分配的。

这是我的模块:

logdown.js

define('Logdown', function() {
function Logdown(name) {
this.name = name;
}

Logdown.prototype.log = function() {
console.log(this.name);
};

return Logdown;
});

这是我的 SystemJS 配置:

SystemJS.config({
baseURL: '/dist',
map: {
'logdown': 'lib/dynamic/logdown/logdown.js'
}
});

最佳答案

长话短说

使用 import ... from "..."; 语法而不是 import ... = require("..."); 使用 named AMD modules 时在 TypeScript 代码中。

解释

我的主要应用程序(使用 Logdown 模块)是用 TypeScript 编写并编译为 ES5 代码。通过此设置,我注意到输出会有所不同,具体取决于所使用的 TypeScript 导入语法。

区别如下:

import Logdown from "logdown";

export default class Main {

constructor(message: string) {
let logger: Logdown = new Logdown('Test');
logger.log();
}
}

编译为:

System.register(["logdown"], function(exports_1, context_1) {
"use strict";
var __moduleName = context_1 && context_1.id;
var logdown_1;
var Main;
return {
setters: [
function(logdown_1_1) {
logdown_1 = logdown_1_1;
}],
execute: function() {
Main = (function() {
function Main(message) {
var logger = new logdown_1.default('Test');
logger.log();
}

return Main;
}());
exports_1("default", Main);
}
}
});

和:

import Logdown = require("logdown");

export default class Main {

constructor(message: string) {
let logger: Logdown = new Logdown('Test');
logger.log();
}
}

编译为:

System.register(["logdown"], function(exports_1, context_1) {
"use strict";
var __moduleName = context_1 && context_1.id;
var Logdown;
var Main;
return {
setters:[
function (Logdown_1) {
Logdown = Logdown_1;
}],
execute: function() {
Main = (function () {
function Main(message) {
var logger = new Logdown('Test');
logger.log();
}
return Main;
}());
exports_1("default", Main);
}
}
});

重要的部分是,当使用 import Logdown from "logdown"; 时,编译后的 TypeScript 代码将创建像这样的新实例 var logger = new logdown_1 .default('测试');.

但是当使用 import Logdown = require("logdown"); 时,编译后的 TypeScript 代码不会添加 default 属性,而是创建这样的实例:var logger = new Logdown('Test');.

因此对于我拥有的模块类型(a named AMD module),我需要使用 import ... from "..."; synatx。

关于javascript - 使用 SystemJS 加载模块时如何摆脱 "default"属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40158747/

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