我有一个困难的时间试图得到lodash模块导入。我已经使用npm+gulp设置了我的项目,并不断撞击相同的墙。我试过普通的lodash,也试过lodash。

lodash npm包:(在包根文件夹中有一个index.js文件)

import * as _ from 'lodash';    

结果:

error TS2307: Cannot find module 'lodash'.

lodash-es npm包:(在lodash.js的包根文件夹中有一个默认的导出)

import * as _ from 'lodash-es/lodash';

结果:

error TS2307: Cannot find module 'lodash-es'.   

gulp任务和webstorm都报告了相同的问题。

有趣的是,这没有返回错误:

import 'lodash-es/lodash';

... 但是当然没有“_”…

我的tsconfig。json文件:

{
  "compilerOptions": {
    "target": "es5",
    "module": "system",
    "moduleResolution": "node",
    "sourceMap": true,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "removeComments": false,
    "noImplicitAny": false
  },
  "exclude": [
    "node_modules"
  ]
}

我的gulpfile.js:

var gulp = require('gulp'),
    ts = require('gulp-typescript'),
    uglify = require('gulp-uglify'),
    sourcemaps = require('gulp-sourcemaps'),
    tsPath = 'app/**/*.ts';

gulp.task('ts', function () {
    var tscConfig = require('./tsconfig.json');
    
    gulp.src([tsPath])
        .pipe(sourcemaps.init())
        .pipe(ts(tscConfig.compilerOptions))
        .pipe(sourcemaps.write('./../js'));
});

gulp.task('watch', function() {
    gulp.watch([tsPath], ['ts']);
});

gulp.task('default', ['ts', 'watch']);

如果我理解正确,我的tsconfig中的modulerresolution:'node'应该将import语句指向node_modules文件夹,其中安装了lodash和lodash-es。我还尝试了许多不同的导入方法:绝对路径、相对路径,但似乎都不起作用。什么好主意吗?

如果有必要,我可以提供一个小zip文件来说明这个问题。


当前回答

安装通通终端:

npm install lodash --save
tsd install lodash --save

在index.html中添加路径

<script>
    System.config({
        packages: {
            app: {
                format: 'register',
                defaultExtension: 'js'
            }
        },
        paths: {
            lodash: './node_modules/lodash/lodash.js'
        }
    });
    System.import('app/init').then(null, console.error.bind(console));
</script>

在.ts文件的顶部导入lodash

import * as _ from 'lodash'

其他回答

我成功地在我的项目中导入了lodash,使用以下命令:

npm install lodash --save
typings install lodash --save

然后我导入它的方式如下:

Import * as _ from 'lodash';

在systemjs.config.js中我定义了这个:

地图:“lodashs: node_modules/lodash/lodash。”

我还为lodash创建了类型,所以现在您实际上可以执行以下操作

安装

npm install lodash-es -S
npm install @types/lodash-es -D

使用

import kebabCase from "lodash-es/kebabCase";
const wings = kebabCase("chickenWings");

如果您使用rollup,我建议使用它而不是lodash,因为它将正确地进行树摇。

尝试>> TSD安装lodash—保存

安装lodash

Sudo NPM安装类型—全局 NPM安装lodash—保存 类型安装lodash—ambient—保存

在index.html中,为lodash添加map:

System.config ({ 包:{ 应用:{ 格式:“注册”, defaultExtension:“js” } }, 地图:{ lodash:“node_modules / lodash index.js” } });

在.ts代码中导入lodash模块

Import _ from 'lodash';

通过typeings和tsd命令管理类型最终被弃用,取而代之的是通过npm install @types/lodash来使用npm。

然而,我在import语句中“不能找到模块lodash”很长一段时间:

import * as _ from 'lodash';

最终我意识到Typescript只会从node_modules/@types开始版本2加载类型,而我的VsCode语言服务仍然使用1.8,所以编辑器报告错误。

如果你使用的是VSCode,你会想要包含

"typescript.tsdk":  "node_modules/typescript/lib"

在你的VSCode设置。Json文件(用于工作空间设置),并确保通过NPM install typescript@2.0.2——save-dev安装了typescript版本>= 2.0.0

在那之后,我的编辑再也不会抱怨导入语句了。