Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何发布NPM,以便使用者可以从不同的顶级目录导入_Node.js_Typescript_Npm_Npm Publish_Npm Pack - Fatal编程技术网

Node.js 如何发布NPM,以便使用者可以从不同的顶级目录导入

Node.js 如何发布NPM,以便使用者可以从不同的顶级目录导入,node.js,typescript,npm,npm-publish,npm-pack,Node.js,Typescript,Npm,Npm Publish,Npm Pack,我正在向NPM发布一个库。该库是用Typescript编写的,Typescript编译的结果放在lib/文件夹中。主文件是导出我的公共API的index.ts: export*from./functions'; 从“./models”导出*; 在package.json中,我指定: {"main": "lib/index.js", "types": "lib/index.d.ts", "files": ["lib/**/*"]} 一旦我的软件包在别处发布和安装,其文件夹结构为: lib/

我正在向NPM发布一个库。该库是用Typescript编写的,Typescript编译的结果放在
lib/
文件夹中。主文件是导出我的公共API的
index.ts

export*from./functions';
从“./models”导出*;
在package.json中,我指定:

{"main": "lib/index.js", "types": "lib/index.d.ts", "files": ["lib/**/*"]}
一旦我的软件包在别处发布和安装,其文件夹结构为:

lib/
  index.js
  index.d.ts
  functions/
    index.ts
    my-function.ts
  models/
    index.ts
    my-model.ts
使用者从包根目录导入所有内容:

从“a库”导入{someFunction,SomeModel};
这是可行的,但我喜欢隔离路径的想法。一条路径用于函数,另一条路径用于模型。当前,如果我删除顶级索引,导入将被隔离,但它们现在在我不想要的路径中包含
lib/
文件夹:

从'a-library/lib/functions'导入{someFunction};
从'a-library/lib/models'导入{SomeModel};
我实际上想要完成的是相同的,但是没有
lib/
。我有一个可行的解决方案,但它似乎太复杂了。以下是有效的方法:

  • 在package.json中,删除
    类型
    文件
  • 删除或清空
    索引.ts
  • 要发布,请使用以下步骤替换简单的
    npm publish
    • 复制package.json并将其粘贴到
      /lib
      文件夹中
    • 将cd放入
      /lib
      文件夹,运行
      npm pack
      ,并记下创建的tarball的名称
    • 运行
      npm发布{{TARBALL_NAME}}
    • cd备份到项目根目录
  • 因此,一旦安装,发布的包将具有以下文件夹结构:

    functions/
      index.ts
      my-function.ts
    models/
      index.ts
      my-model.ts
    
    因为东西不再嵌套在
    lib/
    目录中,消费者可以按照我的意愿导入:

    从'a-library/functions'导入{someFunction};
    从“a-library/models”导入{SomeModel};
    
    问题在于,打包和发布来实现这一点似乎太麻烦了。当我的队友一直在运行
    npm publish
    时,我永远不会让他们进入3或4步流程


    有没有更简单的方法来完成我的目标?

    您可以将这4个步骤移动到npm脚本中,使其自动化,您的队友可以运行该脚本,如
    npm run pack publish