首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >编译类型记录而不丢失node_modules路径?

编译类型记录而不丢失node_modules路径?
EN

Stack Overflow用户
提问于 2016-05-22 15:41:42
回答 1查看 380关注 0票数 0

我正在为一家名为“快车”的图书馆工作。我们的目标是为节点rest服务器设置一些组织标准,所以我希望它有一种特定的工作方式。

首先,我不想使用复杂的require,而是使用es6显式导入。就像这样-

代码语言:javascript
复制
import ExpressKit from 'expresskit';

ExpressKit.start({
  port: 8000
});

我想这样做,而不是var ExpressKit = require('expresskit');,有很多原因。首先,IDE知道导入是什么,而需求则会丢失任何intellisense。我不想使用引用,因为我希望避免在我的所有文件中使用/// <reference/>标记。其次,对于es6显式导入,您不应该需要名称空间/模块,因为路径充当名称空间itselfs,比如com.org.foo.bar。这里有一个使用表达短剧的路线-

代码语言:javascript
复制
import Route from 'expresskit/route';
import {Param} from 'expresskit/property';
import User from './';

export default class UserRouter {
  @Route('GET', '/user/:id')
  public static getUser(@Param('id') userId: number,) {
    return new User();
  }
}

你很清楚它是从哪里来的。没有全局作用域对象或通过expresskit命名空间进行引用。另一种选择是这样-

代码语言:javascript
复制
/// <reference path="../node_modules/expresskit/expresskit.d.ts"/>

var ExpressKit = require('expresskit');
var Route = ExpressKit.Route;
var Param = ExpressKit.Param;

import User from './';

export default class UserRouter {
  @Route('GET', '/user/:id')
  public static getUser(@Param('id') userId: number,) {
    return new User();
  }
}

因此,我遇到的问题以及我无法使es6显式导入正常工作的原因是,当类型记录是通过tsc编译的时候。Javascript构建在一个bld目录中。由于您是通过es6导入引用快捷短剧源,所以它也在将其构建为bld。结果是这样的-

代码语言:javascript
复制
  /
    bld/
      node_modules/
        expresskit/
          ...
      user/
        index.js
        router.js
      index.js
    node_modules/
      expresskit/
        ...
      express/
        ...
      body-parser/
        ...
    user/
      index.ts
      router.ts
    index.ts
    tsconfig.json

现在,当我通过运行node bld/index.js运行构建项目时,我得到了错误-

错误:找不到模块‘快递’

之所以这样做,是因为bld/node_modules/expresskit/index.js正在调用require('express'),当它的实际位置在node_modules/中时,它在bld/node_modules/中寻找快递。

我不想把所有东西从node_modules/复制到bld/node_modules/,如果这样做的话,我认为库的有用性是值得怀疑的。

我要做的是使用systemjs而不是commonjs编译成一个文件。这将需要一个自定义构建脚本,将var System = require('systemjs')注入到构建文件的顶部。但这可能是我的选择中最不具侵略性的。这是该走的路吗?

,那么我怎么才能把蛋糕也吃了呢?

EN

回答 1

Stack Overflow用户

发布于 2017-09-17 14:33:55

虽然我认为OP已经在一年多后解决了他们的问题,但是对于每个人来说,以后如何来到这里,这就是它的工作原理。

只需将node_modules添加到tsconfig.json文件中的"exclude"列表中即可。在进行编译时,最好添加构建文件夹,不要每次都重新处理它,添加更多不必要的文件(导致像bld/bld/bld/...这样的文件夹),每次编译时都需要构建时间。

代码语言:javascript
复制
{
    "compilerOptions": { /* ... */ },
    "exclude": ["node_modules", "bld"]
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37376338

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档