Комментарии 11
default не имеет отношения к модулям AMD. Эта штука появилась в ES6-модулях и оттуда перекочевала в TypeScirpt-модули.
На самом деле вы просто неправильно подключаете Vue. Вы используете вот такую конструкцию:
import Vue from "vue";
Эта конструкция использует default import, который, в свою очередь, выливается в обращение к свойству default.
А надо делать — вот так:
import * as Vue from "vue";
Ну или можно использовать файл vue.esm.js вместо vue.js: там делается default export вместо простого присваивания.
Хотя «в лоб» не проходит, при выполнении ошибка:
Uncaught (in promise) Error: Unable to dynamically transpile ES module
A loader plugin needs to be configured via `SystemJS.config({ transpiler: 'transpiler-module' })`.
Instantiating cdn.jsdelivr.net/npm/vue@2.5.13/dist/vue.esm.js
vue.esm.js:10809 Uncaught SyntaxError: Unexpected token export
Компилятор TS выдает ошибки.
Может подскажете, что ещё подкрутить?
TryVue D:\Git\starter-vue\TryVue\ClientApp\index.ts 5
Ошибка TS2351 Build: Невозможно использовать new с выражением, у типа которого нет сигнатуры вызова или конструктора.
TryVue D:\Git\starter-vue\TryVue\ClientApp\components\Hello.ts 4
Ошибка TS2339 Build: Свойство «extend» не существует в типе «typeof „D:/Git/starter-vue/TryVue/node_modules/vue/types/index“».
Может есть ссылка на работающий пример с TypeScript для случая: import * as Vue from «vue»?
Ох, там там еще и тайпинги родные?.. Значит, я невнимательно читал вашу прошлую статью...
Вот, нашел еще одно решение. Нужна настройка "esModuleInterop": true
.
Сработало! Спасибо!
Проект с amd-модулями работает без заплатки и через SystemJS, и через RequireJS. В файлах TypeScript ничего менять не надо, достаточно поменять tsconfig.json:
{
"compilerOptions": {
"sourceMap": true,
"target": "es5",
"strict": true,
"module": "amd",
"outFile": "wwwroot/dist/main.js",
"moduleResolution": "node",
"esModuleInterop": true
},
"include": [
"./ClientApp/**/*.ts"
]
}
Заплатку можно убирать. Получается зря гланды вырывал не через то место.
RequireJS для приложений Vue.js + Asp.NETCore + TypeScript