简体   繁体   中英

Importing angular in typescript using webpack load

Hi folks on the Internet! Today I am presenting you another problem! (Yay?)

I am using webpack with the ts-loader to compile typescript code. However when I'm importing angular like this:

import * as angular from "angular";
angular.module("app", []);

It is actually importing 2 scripts as presented below:

[18:11:21] Starting 'build'...
ts-loader: Using typescript@2.0.6 and C:\testProject\tsconfig.json
[18:11:24] [webpack] Hash: 155db0dc394ae32ae9e6
Version: webpack 1.13.2
Time: 2845ms
 Asset     Size  Chunks             Chunk Names
app.js  3.11 MB       0  [emitted]  main
chunk    {0} app.js (main) 1.19 MB [rendered]
    [0] ./app/app.module.ts 2.26 kB {0} [built]
    [1] ./~/angular/index.js 48 bytes {0} [built]
    [2] ./~/angular/angular.js 1.19 MB {0} [built]
  • index.js : The entry point of the angular library code
  • angular.js : The angular library

This is a problem because index.js also loads the angular library in which the result is the angular library loaded twice .

Here is my webpack.config.js :

entry: "./app/app.module.ts",

output: {
  publicPath: "/lib/",
  path: path.join(__dirname,"lib"),
  filename: "app.js"
},

// source map
devtool: "#inline-source-map",

module: {
  loaders: [
    {
      test: /\.ts$/,
      // Exclude node modules
      exclude: [/node_modules/],
      loader: 'ts-loader'
    },
    {
      test: /\.html$/,
      // Exclude node modules
      exclude: [/node_modules/],
      loader: 'raw-loader'
    }
  ]
}

I think you mis-understand how webpack works. All modules are executed once no matter how many times you require them. For example if you do:

 var angular = require('angular');
 var anotherAngular = require('angular');

The angular script will only really execute once, and the result "cached" for all subsequent calls to require .

In your case what you are seeing is perfectly normal. When you load angular from an npm package, the npm package uses the index.js which looks like:

require('./angular');
module.exports = angular;

It is common in npm packages to have a minimal index.js that just re-exports another script. When you are loading with webpack webpack will load index.js which will in turn load angular.js and return the result. This shouldn't cause you any problems, and nothing is really getting loaded twice.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM