我正在为 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
去哪儿了?
谢谢,