我正在关注此tutorial以了解网络包。它已经过时了,因为引用的工具在我的案例中进行了升级。我的版本如下。
成功创建bundle.js
文件后,我似乎无法访问/引用我的TypeScript到JavaScript类。我的tsconfig.json
如下所示。
{
"compilerOptions": {
"module": "commonjs",
"sourceMap": true,
"declaration": true
},
"include": [
"src/**/*"
]
}
我的wepack.config.js如下所示。
var webpack = require('webpack');
module.exports = {
entry: './src/app.ts',
output: {
filename: 'bundle.js'
},
devtool: 'source-map',
resolve: {
extensions: ['', '.webpack.js', '.web.js', '.ts', '.js']
},
module: {
loaders: [
{ test: /\.ts$/, loader: 'ts-loader' }
]
}
}
要转换TypeScript代码,我只需输入tsc
即可。要将所有代码捆绑到bundle.js
,我只需输入webpack
即可。 (tsc和webpack全局安装)。
在我的src目录中,我只有2个简单的类。 car.ts
如下所示。
export class Car {
public sayHi(): void {
console.log('car says hi');
}
}
app.ts
如下所示。
import { Car } from './car'; //alternatively, import Car = require('./car');
let car = new Car();
car.sayHi();
然后我将此bundle.js
加载到HTML页面的浏览器中,如下所示。
<html>
<head>
<title>Test Webpack</title>
</head>
<body>
<script src="bundle.js"></script>
</body>
</html>
我可以在(Chrome)JavaScript控制台中看到日志消息&#34;汽车说嗨&#34;。但是如何创建一个新的Car实例?以下在JavaScript控制台上的尝试都无效。
var c1 = new Car(); //Uncaught reference error
var c2 = new car.Car(); //Uncaught reference error
在bundle.js
内,我确实看到正在生成此代码/模块(代码段)。
/* 0 */
/***/ function(module, exports, __webpack_require__) {
"use strict";
var car_1 = __webpack_require__(1);
var car = new car_1.Car();
car.sayHi();
/***/ },
/* 1 */
/***/ function(module, exports) {
"use strict";
var Car = (function () {
function Car() {
}
Car.prototype.sayHi = function () {
console.log('car says hi');
};
return Car;
}());
exports.Car = Car;
/***/ }
我的最终目标是将src
目录中的所有TypeScript文件(使用(TypeScript)映射)转换为单个bundle.js
作为模块,以便我可以使用/引用代码(作为JavaScript中的JavaScript)浏览器)如下。
var car = new mylib.Car();
var plane = new mylib.Plane();
car.sayHi();
plane.sayHi();
关于我做错的任何想法?
答案 0 :(得分:2)
您需要设置output.library
设置:
output: {
...
library: 'MyLibrary'
}
然后您可以在控制台中以这种方式使用它:
var x = new MyLibrary.Car();
Webpack documentation(output.libray)
答案 1 :(得分:0)
你应该做的是让webPack也为你处理转换。 使用TypeScript loader。
webpack在做什么模块(你输入的最后一个文件,所有内容都在一个带有上下文的函数中,没有你在全局空间中给出的名字)。任何全局名称都绑定到作用域(或者如果你丑陋的话就改变了)所以你无法从控制台访问它们。使webpack使用打字稿加载器,你可以引用汽车只需要或导入文件。