2.5.13
https://github.com/80LevelElf/VueProblemApp
を開いてアプリを実行するだけです
/VueProblemApp/VueProblemApp/index.htmlファイルを作成すると、コンソールにエラーが表示されます。
Typescriptコンパイラは、Vue型を取り、適切なコードを生成する必要があります。
結果のJSコードは正しくありません(詳細な調査についてはコメントを参照してください)。
@ yyx990803から回答を得ましたが、私はJSの最初から
そして、私が今それを手に入れれば、問題はまだ関連しています。
エヴァンは私に答えました:
「vue」モジュールが自分で含めたvue.jsUMDビルドを指すように構成に何もないようです。 そのため、TSコンパイラはnode_modules / vueからそれを解決し、CommonJSビルドであるpackage.jsonの「main」フィールドを使用しています。 tsconfigでcompilerOptions.pathsを使用してマッピングを指定する必要があります。
したがって、私がEvanを正しく理解した場合、彼はRequireJSが間違ったvue.jsファイルをダウンロードすると考えました。
正しいものはUMD / AMDモジュールシステム用ですが、TSコンパイラはCommonJSモジュールシステム用のvue.jsファイルへの参照を作成します。 これが私がエラーを受け取った理由です。
しかし、それは正しくありません。 TSコンパイラは参照するだけです
私のサイト/
私の場合は次のとおりです。
mySite / vue.js
vue.jsファイルが何であっても。 したがって、このリンクにvue.jsがない場合は、404エラーが発生します。
また、node_modules / vue / package.jsonのメイン設定を「main」:「dist / vue.js」のように変更しようとすると、同じエラーが発生します。
RequireJSによってロードされているvue.jsファイルを確認しましたが、これは正しいファイルです。 RequireJSはそれを正しく解析します。問題はタイピングにあります。
また、このようにインポートを行う場合( @ Micene09が提供するように):
import { Vue } from "vue-property-decorator";
mySite /vue.jsに同じvue.jsファイルをロードしてもすべて正常に機能します。
ですから、私があなたを正しく理解しても、問題はまだ残っています。
申し訳ありませんが、これは非常に具体的な設定の範囲外の質問であり、問題で解決する必要はありません。 問題は、Vue自体からのみ発生するバグレポートに関するものです。
@ 80LevelElf-私はこれを(今のところ)次のようにして解決しました:
import { VueConstructor } from "vue";
const Vue = require("vue") as VueConstructor; // cast as VueConstructor to get typings.
const app = new Vue({
template: "<h1>Hello World</h1>
});
@ yyx990803-私は似ていますが、状況が異なります。 TypeScriptからのcommonjs
出力を使用しています(webpackなし)。 OPとIの類似点の1つは、どちらもTypeScript baseUrl
オプションを使用していることです。 TypeScriptの標準インポートに間違いなく問題があります。
私もVue2.5.13を使用しています。 Node8.9.3とTypeScript2.6でSSRを設定しています。 私のtsconfig.json
は次のようになります。
{
"compilerOptions": {
"outDir": "build",
"target": "es6",
"module": "commonjs",
"moduleResolution": "node",
"sourceMap": true,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"rootDir": "./src",
"baseUrl": "./src",
"noUnusedLocals": true
},
"exclude": [
"node_modules",
"typings"
]
}
compilerOptions.paths
プロパティを介してvue.esm.jsファイルを読み込もうとするなど、他の多くの回避策を試しましたが、成功しませんでした。 OPとまったく同じvue_1.default is not a constructor
エラーが発生していました。
私は同じ問題に遭遇しました。
私の理解では、vue.jsファイルはvue-class-componentと同じようにexports.default
変数を設定する必要があります。
vue-class-component.js(192行目):
exports['default'] = Component$1;
vue-class-componentファイルには、Vueから欠落しているデフォルトのエクスポートを処理するための特別なケースがあります。これが機能する理由です。
vue-class-component.js(12行目):
Vue = Vue && Vue.hasOwnProperty('default') ? Vue['default'] : Vue;
残念ながら、TypeScript 2.5コンパイラは、欠落しているデフォルトを処理するための特別なケースを出力しません。 ただし、 TypeScript 2.7には、この問題を修正する新しいオプション( esModuleInterop
)があります。
{
"compilerOptions": {
"module": "amd",
"esModuleInterop": true,
...
},
...
}
esModuleInterop
をtrue
に設定すると、出力には__importDefault
という関数が含まれ、欠落しているデフォルトのプロパティを適切に処理します。
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
}
define(["require", "exports", "vue"], function (require, exports, vue_1) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
vue_1 = __importDefault(vue_1);
var app = new vue_1.default({
...
});
});
最も参考になるコメント
私は同じ問題に遭遇しました。
私の理解では、vue.jsファイルはvue-class-componentと同じように
exports.default
変数を設定する必要があります。vue-class-component.js(192行目):
exports['default'] = Component$1;
vue-class-componentファイルには、Vueから欠落しているデフォルトのエクスポートを処理するための特別なケースがあります。これが機能する理由です。
vue-class-component.js(12行目):
Vue = Vue && Vue.hasOwnProperty('default') ? Vue['default'] : Vue;
残念ながら、TypeScript 2.5コンパイラは、欠落しているデフォルトを処理するための特別なケースを出力しません。 ただし、 TypeScript 2.7には、この問題を修正する新しいオプション(
esModuleInterop
)があります。esModuleInterop
をtrue
に設定すると、出力には__importDefault
という関数が含まれ、欠落しているデフォルトのプロパティを適切に処理します。