如何从 webpack 创建的包中引用或访问我的类?

Jan*_*yne 5 javascript typescript webpack

我正在按照本教程学习 webpack。它已经过时了,因为在我的情况下引用的工具已升级。我的版本如下。

  • ts-loader ^1.3.3
  • tsd ^0.6.5
  • 打字稿^2.1.5
  • 网络包 ^1.14.0

成功创建bundle.js文件后,我似乎在访问/引用我的 TypeScript 到 JavaScript 类时遇到问题。我的tsconfig.json看起来像下面这样。

{
  "compilerOptions": {
    "module": "commonjs",
    "sourceMap": true,
    "declaration": true
  },
  "include": [
    "src/**/*"
  ]
}
Run Code Online (Sandbox Code Playgroud)

我的 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' }
    ]
  }
}
Run Code Online (Sandbox Code Playgroud)

要转译 TypeScript 代码,我只需输入tsc. 捆绑的所有代码到bundle.js,我只需键入webpack。(tsc 和 webpack 是全局安装的)。

在我的 src 目录中,我只有 2 个简单的类。在car.ts如下所示。

export class Car {
  public sayHi(): void {
    console.log('car says hi');
  }
}
Run Code Online (Sandbox Code Playgroud)

app.ts如下所示。

import { Car } from './car'; //alternatively, import Car = require('./car');

let car = new Car();
car.sayHi();
Run Code Online (Sandbox Code Playgroud)

然后我将其加载bundle.js到 HTML 页面中的浏览器中,如下所示。

<html>
  <head>
    <title>Test Webpack</title>
  </head>
  <body>
    <script src="bundle.js"></script>
  </body>
</html>
Run Code Online (Sandbox Code Playgroud)

我可以在 (Chrome) JavaScript 控制台中看到日志消息“car say hi”。但是如何创建一个新的 Car 实例呢?在 JavaScript 控制台上的以下尝试不起作用。

var c1 = new Car(); //Uncaught reference error
var c2 = new car.Car(); //Uncaught reference error
Run Code Online (Sandbox Code Playgroud)

在里面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;


/***/ }
Run Code Online (Sandbox Code Playgroud)

我的最终目标是将src目录中的所有 TypeScript 文件与(TypeScript)映射转换bundle.js为一个模块,以便我可以使用/引用代码(作为浏览器中的 JavaScript),如下所示。

var car = new mylib.Car();
var plane = new mylib.Plane();
car.sayHi();
plane.sayHi();
Run Code Online (Sandbox Code Playgroud)

关于我做错了什么的任何想法?

Fab*_*sta 0

您应该做的是让 webPack 也为您处理转译。使用TypeScript 加载器

webpack 所做的是制作模块(您放置的最后一个文件,所有内容都在具有上下文的函数内,并且没有您在全局空间上指定的名称)。任何全局名称都绑定到范围(如果您丑陋,则可以更改),因此您可以不能从控制台访问它们。让 webpack 使用 typescript 加载器,您只需需要或导入文件即可引用汽车。