如何使用TypeScript在浏览器中使用NPM包?

时间:2015-12-04 16:04:32

标签: javascript npm typescript

这是我的设置:

的index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">

    <script src="../node_modules/systemjs/dist/system.js"></script>
    <script src="../node_modules/lodash/index.js"></script>
</head>
<body>
    <script>
        System.config({
            packages: {'js': {defaultExtension: 'js'}}
        });

        System
            .import('./js/app')
            .catch(console.error.bind(console));
    </script>
</body>
</html>

app.ts

import {_} from 'lodash';

export class App {};

当我尝试将TypeScript转换为JavaScript时,我收到以下错误:

error TS2307: Cannot find module 'lodash'.

使用TypeScript时,将NPM打包加载到项目中的最标准/推荐方法是什么?

备注

    可以访问
  • node_modules并正确提供文件node_modules/lodash/index.js
  • 我尝试不使用Bower,因为我发现应该使用NPM代替。
  • 我正在使用SystemJS我相信它是一个通用的模块加载器。

2 个答案:

答案 0 :(得分:0)

首先,打字稿无法找到您的模块,因为您需要将打字输入文件中。其次,您需要使用--module系统标志(或tsconfig.json中的等效标志)导出您的打字稿。第三,它需要使用systemjs加载。我强烈建议您使用JSPM,我知道我知道 - 另一个包管理器,但它更像是NPM的扩展而不是其他任何东西。它允许您非常轻松地管理您的Systemjs deps。 http://jspm.io/

答案 1 :(得分:0)

我担心我不熟悉SystemJ,但据我所知的模块加载器,他们通过加载的路径识别库,而不是模块&# 39;全球名称或任何东西。所以,通过<script>来加载lodash实际上会帮助它知道它是否有它,或者要回馈什么对象。从基本的角度来说,您希望通过模块加载器加载它,而不是单独加载它。

但是,您可能不想写&#34; ../ node_modules / &#34;在脚本中的所有require语句;这很烦人。你可以通过SystemJs&#39;配置文档,以查看是否有创建映射的方法,以便特定模块名称将自动使其知道使用脚本的某个路径。