webpack& typescript:部分lodash导入,es5作为目标不起作用

时间:2017-06-12 11:15:05

标签: typescript import webpack bundle

我正在尝试部分导入lodash以在webpack / typescript / react环境中工作以减少bundle大小。我正在使用lodash@4.17.4webpack@2.4.1

我知道我不应该像这样导入lodash,因为它会导入整个lodash库:

import * as lodash from 'lodash';
 lodash.clone({});

所以我尝试了这个:

import { clone, create } from 'lodash';

但是这仍然会导入整个库,而不仅仅是我需要的函数(bundlesize不会改变)。 所以我读了一下,看到了这个:

import clone = require('lodash/clone');

这实际上有效,只有我需要的功能才能导入,而我的捆绑缩小了几百KB。但不幸的是,打字稿给了我以下错误(仅在构建软件包时显示错误,在运行watch / webDev-Server时一切正常):

Import assignment cannot be used when targeting ECMAScript 2015 modules. Consider using 'import * as ns from "mod"', 'import {a} from "mod"', 'import d from "mod"', or another module format instead.

这是因为我的打字稿配置中有"target":"es5"吗?如果是这样,我怎么能用es5模块作为目标来实现部分导入呢?

我的打字稿配置如下:

{
  "compilerOptions": {
    "sourceMap": true,
    "target": "es5",
    "jsx": "react",
    "module": "commonjs",
    "moduleResolution": "node",
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "declaration": false,
    "noImplicitAny": false,
    "noImplicitReturns": false,
    "removeComments": true,
    "strictNullChecks": false,
    "outDir": "build",
    "lib": [
      "es6",
      "es7",
      "dom"
    ]
  },
  "exclude": [
    "dist",
    "build",
    "node_modules",
    "bower_components"
  ]
}

有什么想法吗?

修改 当我做一个常规的要求时:

const clone = require('lodash/clone');

一切都编译没有错误(手表和构建)。这是导入最新版本的lodash的正确方法吗?这似乎不对

1 个答案:

答案 0 :(得分:0)

我导入lodash

import { clone } from 'lodash/clone'