javascript - 在 Typescript 中动态导入一个 JS 插件模块
问题描述
我正在为Obsidian.md创建一个插件。该插件是用 Typescript 编写的,并使用以下内容编译tsconfig.json
:
{
"compilerOptions": {
"baseUrl": ".",
"inlineSourceMap": true,
"inlineSources": true,
"module": "ESNext",
"target": "es6",
"allowJs": true,
"noImplicitAny": true,
"moduleResolution": "node",
"importHelpers": true,
"lib": [
"dom",
"es5",
"scripthost",
"es2015"
]
},
"include": [
"**/*.ts"
]
}
我做了一个单独的项目,并创建了一个简单的打字稿文件。我正在使用独立的 laravel mix 来进行捆绑。webpack.mix.js
看起来像这样:
let mix = require('laravel-mix');
mix
.ts('src/*.ts', 'dist')
.setPublicPath('dist');
简单的。
我的src/plugin1.ts
样子是这样的:
// plugins/src/plugin1.ts
export default function foo() {
console.log("Foo!");
}
这编译为dist/plugin1.js
,看起来像这样:
/******/ (() => { // webpackBootstrap
/******/ "use strict";
var __webpack_exports__ = {};
// This entry need to be wrapped in an IIFE because it uses a non-standard name for the exports (exports).
(() => {
var exports = __webpack_exports__;
/*!**********************!*\
!*** ./src/test1.ts ***!
\**********************/
Object.defineProperty(exports, "__esModule", ({
value: true
}));
function foo() {
console.log("Foo!");
}
exports.default = foo;
})();
/******/ })()
;
好的,现在回到 Obsidian.md 插件。在插件加载功能中,我有以下代码:
console.log(`Importing from: ${test1_path}`);
const im = await import(test1_path);
console.log(im);
哪里const test1_path: string = <the path to plugins/dist/plugin1.js
。
因此,我们在控制台中得到以下输出:
Importing from: <the plugin folder>/dist/test1
main.ts:50 {default: {…}}
该im
对象如下所示:
{"default":{}}
为什么?
我的foo
去哪儿了?
谢谢,
解决方案
推荐阅读
- javascript - 在 Firebase 身份验证中更新电话号码 - React Native
- model-view-controller - 如何在mvc中显示值文本而不是下拉列表的ID
- c# - 为 Windows 窗体应用程序创建搜索功能
- c# - 动态添加到 TableLayoutPanel 的行显示在不同的行位置
- ios - 在 Swift 中共享位置
- typo3 - 如何为文件挂载中的任何内容设置读取权限并为选定的子文件夹设置写入权限?
- javascript - React JSX Onclick 组件
- python - 如何使其成为查询搜索的最佳选择,Mongodb?
- mysql - Mysql 在我启动时从 Xampp 关闭
- json - filebeat/logstash 将 json 转换为 csv 格式