我使用的是Typescript&的WebPack。我的代码如下。我在Chrome中运行它会出错:
Uncaught TypeError: vue_1.default is not a constructor
at Object.defineProperty.value (Index.ts:3)
at __webpack_require__ (bootstrap f29fbbb047d131556dcf:19)
at Object.defineProperty.value (bootstrap f29fbbb047d131556dcf:62)
at bootstrap f29fbbb047d131556dcf:62
我添加了导入,也做了决定 - >别名 - > vue部分。并尝试了一大堆其他的东西,但它没有工作。我也玩过tsconfig文件,但没有运气。
我该如何解决这个问题?
webpack.config.js
var debug = process.env.NODE_ENV !== "production";
var webpack = require('webpack');
module.exports = {
context: __dirname,//another dir +"/app"
// devtool: debug ? "inline-sourcemap" : null,
// Enable sourcemaps for debugging webpack's output.
devtool: "source-map",
entry: "./code/client/scripts/Index.ts",
output: {
path: __dirname + "/code/client/views",
filename: "scripts.min.js"
},
plugins: debug ? [] : [
new webpack.optimize.DedupePlugin(),
new webpack.optimize.OccurenceOrderPlugin(),
new webpack.optimize.UglifyJsPlugin({mangle: false, sourcemap: false}),
new webpack.IgnorePlugin(/fs/),
new webpack.DefinePlugin({
'process.env': {
NODE_ENV: '"production"'
}
})
],
node: {
fs: 'empty',
child_process: 'empty',
},
resolve: {
// Add '.ts' and '.tsx' as resolvable extensions.
alias: {
vue: 'vue/dist/vue.js'
},
extensions: [".ts", ".tsx", ".js", ".json"]
},
module: {
rules: [
// All files with a '.ts' or '.tsx' extension will be handled by 'awesome-typescript-loader'.
{ test: /\.tsx?$/, loader: "awesome-typescript-loader" },
// All output '.js' files will have any sourcemaps re-processed by 'source-map-loader'.
{ enforce: "pre", test: /\.js$/, loader: "source-map-loader" }
]
},
};
tsconfig.js
{
"compilerOptions": {
"module": "commonjs",
"target": "es2015",
"noImplicitThis": true,
"sourceMap": true,
"strictNullChecks": true,
"removeComments": false,
"moduleResolution": "node",
"types": [
"node",
"mocha",
"chai"
],
"typeRoots": [
"node_modules/@types"
]
},
"exclude": [
"node_modules"
]
}
index.ts
import Vue from "vue"
var app = new Vue({
el: '#app',
data: {
message: 'Hello Vue!',
}
})
console.log(app)
HTML
<div id="app">
<p>{{ message }}</p>
<input v-model="message">
</div>
答案 0 :(得分:7)
vue/dist/vue.js
文件没有默认导出,但Vue还提供ES模块版本:vue/dist/vue.esm.js
。您想要使用这个,因为您将它用作带有import
语句的ES模块。
你的别名应该是:
alias: {
'vue': 'vue/dist/vue.esm.js'
},