Javascript 如何像本地库一样使用Transfile模块

Javascript 如何像本地库一样使用Transfile模块,javascript,node.js,typescript,github,Javascript,Node.js,Typescript,Github,您好,我有一个库可在其他项目中使用,但由于某些原因,当尝试在其他项目中直接将我的github用作存储库时,我得到错误: 在我的主包装上 从“./broker/index”导出{RabbitServer};^^合成错误: 意外标记“导出” 我在package.json上从git调用我的库 "rabbitlib": "sptGabriel/rabbitmqLib", 主程序包中的我的索引: import express from 'express'; imp

您好,我有一个库可在其他项目中使用,但由于某些原因,当尝试在其他项目中直接将我的github用作存储库时,我得到错误:

在我的主包装上

从“./broker/index”导出{RabbitServer};^^合成错误: 意外标记“导出”

我在package.json上从git调用我的库

"rabbitlib": "sptGabriel/rabbitmqLib",
主程序包中的我的索引:

import express from 'express';
import { RabbitServer } from 'rabbitlib';
const app = express();

const server = RabbitServer.getInstance();
server.start();
console.log(server);
app.get('/', (req, res) => {
  return res.send('service A');
});
app.listen(3001, () => {
  console.log(`⚡️ Service A on port 3001`);
});
/home/spirit/Documentos/microservices_emasa/backend/micro-hr/node_modules/rabbitlib/src/index.ts:1
export { RabbitServer } from './broker/index';
^^^^^^

SyntaxError: Unexpected token 'export'
    at wrapSafe (internal/modules/cjs/loader.js:991:16)
    at Module._compile (internal/modules/cjs/loader.js:1039:27)
    at Module._compile (/home/spirit/Documentos/microservices_emasa/backend/micro-hr/node_modules/source-map-support/source-map-support.js:547:25)
    at Module.m._compile (/tmp/ts-node-dev-hook-7464545584140876.js:57:33)
    at Module._extensions..js (internal/modules/cjs/loader.js:1096:10)
    at require.extensions..jsx.require.extensions..js (/tmp/ts-node-dev-hook-7464545584140876.js:102:20)
    at require.extensions.<computed> (/tmp/ts-node-dev-hook-7464545584140876.js:59:20)
    at Object.nodeDevHook [as .ts] (/home/spirit/Documentos/microservices_emasa/backend/micro-hr/node_modules/ts-node-dev/lib/hook.js:63:13)
    at Module.load (internal/modules/cjs/loader.js:940:32)
    at Function.Module._load (internal/modules/cjs/loader.js:781:14)
[ERROR] 16:32:31 SyntaxError: Unexpected token 'export'
主程序包上出现错误:

import express from 'express';
import { RabbitServer } from 'rabbitlib';
const app = express();

const server = RabbitServer.getInstance();
server.start();
console.log(server);
app.get('/', (req, res) => {
  return res.send('service A');
});
app.listen(3001, () => {
  console.log(`⚡️ Service A on port 3001`);
});
/home/spirit/Documentos/microservices_emasa/backend/micro-hr/node_modules/rabbitlib/src/index.ts:1
export { RabbitServer } from './broker/index';
^^^^^^

SyntaxError: Unexpected token 'export'
    at wrapSafe (internal/modules/cjs/loader.js:991:16)
    at Module._compile (internal/modules/cjs/loader.js:1039:27)
    at Module._compile (/home/spirit/Documentos/microservices_emasa/backend/micro-hr/node_modules/source-map-support/source-map-support.js:547:25)
    at Module.m._compile (/tmp/ts-node-dev-hook-7464545584140876.js:57:33)
    at Module._extensions..js (internal/modules/cjs/loader.js:1096:10)
    at require.extensions..jsx.require.extensions..js (/tmp/ts-node-dev-hook-7464545584140876.js:102:20)
    at require.extensions.<computed> (/tmp/ts-node-dev-hook-7464545584140876.js:59:20)
    at Object.nodeDevHook [as .ts] (/home/spirit/Documentos/microservices_emasa/backend/micro-hr/node_modules/ts-node-dev/lib/hook.js:63:13)
    at Module.load (internal/modules/cjs/loader.js:940:32)
    at Function.Module._load (internal/modules/cjs/loader.js:781:14)
[ERROR] 16:32:31 SyntaxError: Unexpected token 'export'
index.ts:

export { RabbitServer } from './broker/index';
我的rabbitServer:

import { Connection, Channel, connect } from 'amqplib';
import { Logger } from '../utils/logger';
import { sleep } from '../utils/sleep';
import { retry } from 'utils/retry';
export interface IMessage {
  publishedAt: Date;
}
export interface IHandler<T> {
  handle(message: T): any;
}
export interface IRabbitServer<T extends IMessage> {
  getConnection(): Promise<Connection>;
  produce<T>(queue: string, message: T): Promise<boolean>;
  subscribe(queue: string, onMessage: (msg: T | null) => boolean): void;
  subscribeWithHandler(queue: string, hander: IHandler<T>): void;
}

export class RabbitServer implements IRabbitServer<IMessage> {
  private static _instance: RabbitServer;
  private rabbitUrl: string;
  private connection: Connection;
  private channel: Channel;
  private constructor() {
    if (process.env.RABBIT_HOST) this.rabbitUrl = process.env.RABBIT_HOST;
  }
  public static getInstance = (): RabbitServer => {
    if (!RabbitServer._instance) RabbitServer._instance = new RabbitServer();
    return RabbitServer._instance;
  };
  public setRabbitUrl = (url: string) => {
    if (!url || this.rabbitUrl) return;
    this.rabbitUrl = url;
  };
  public getConnection(): Promise<Connection> {
    return new Promise((resolve, reject) => {
      resolve(this.connection);
      reject('No Connection established');
    });
  }
  public start = async () => {
    return new Promise<Connection>((resolve, reject) => {
      if (this.connection || !this.rabbitUrl) {
        const message = !this.rabbitUrl
          ? 'The host of rabbitmq was not found in the environment variables'
          : 'Connection has already been established';
        Logger.info(message);
        reject(new Error(message));
      }
      retry<Connection>(() => connect(this.rabbitUrl), 10, 1000)
        .then((conn) => {
          this.connection = conn;
          resolve(conn);
        })
        .catch((err) => reject(new Error(err)));
    });
  };
}
从'amqplib'导入{Connection,Channel,connect};
从“../utils/Logger”导入{Logger};
从“../utils/sleep”导入{sleep};
从“utils/retry”导入{retry};
导出接口IMessage{
发布日期:日期;
}
导出接口IHandler{
句柄(消息:T):任意;
}
导出接口IRabbitServer{
getConnection():承诺;
product(队列:string,消息:T):Promise;
订阅(队列:string,onMessage:(msg:T | null)=>boolean):void;
SubscribeWidthHandler(队列:string,hander:IHandler):void;
}
导出类RabbitServer实现IRabbitServer{
私有静态_实例:RabbitServer;
私有rabbitUrl:string;
私人连接:连接;
私人频道:频道;
私有构造函数(){
if(process.env.RABBIT_HOST)this.rabbitUrl=process.env.RABBIT_HOST;
}
公共静态getInstance=():RabbitServer=>{
如果(!RabbitServer.\u实例)RabbitServer.\u实例=新RabbitServer();
返回RabbitServer.\u实例;
};
公共setRabbitUrl=(url:string)=>{
如果(!url | | this.rabbitUrl)返回;
this.rabbitUrl=url;
};
public getConnection():承诺{
返回新承诺((解决、拒绝)=>{
解决(这个连接);
拒绝(“未建立连接”);
});
}
公共启动=异步()=>{
返回新承诺((解决、拒绝)=>{
if(this.connection | |!this.rabbitUrl){
const message=!this.rabbitUrl
?'在环境变量中未找到rabbitmq的主机'
:“已建立连接”;
Logger.info(消息);
拒绝(新错误(消息));
}
重试(()=>connect(this.rabbitUrl),101000)
。然后((连接)=>{
this.connection=conn;
决议(康涅狄格州);
})
.catch((err)=>拒绝(新错误(err));
});
};
}
您的
“main”
指向一个TypeScript源文件,而您还没有配置您的包,使其在发布到npm或从git repo安装时生成。添加
“prepare”:“npm run build”
作为脚本,并将main修复为
“build/index.js”