我想这样做,所以npm install也会安装这个包。Json的../somelocallib或者更重要的是它的依赖项。

"dependencies": {
    "express": "*",
    "../somelocallib": "*"
}

当前回答

在2020年的这里,我正在用Windows 10操作系统工作

"dependencies": {
    "some-local-lib": "file:../../folderY/some-local-lib" 
    ...
}

然后进行npm安装。结果是在节点模块中创建文件夹的快捷方式。 这行不通。你需要一个硬链接-哪个窗口支持,但是 你必须在Windows中做一些额外的事情来创建一个硬符号链接。

因为我不是真的想要一个硬链接,我尝试使用一个url代替:

"dependencies": {
    "some-local-lib": "file:///D:\\folderX\\folderY\\some-local-lib.tar" 
     ....
}

这个很好用。 tar(你必须tar库的build / dist文件夹中的东西)被提取到node-modules中的一个真正的文件夹中,你可以像其他东西一样导入。 显然tar部分有点烦人,但由于'some-local-lib'是一个库(无论如何都要构建),我更喜欢这个解决方案,而不是创建一个硬链接或安装一个本地npm。

其他回答

有一个很棒的yalc可以帮助管理本地包。它帮助我使用后来部署的本地库。只需用.yalc目录打包项目(带或不带/node_modules)。所以只要这样做:

npm install -g yalc  

in directory lib/$ yalc publish 

在项目:

project/$ yalc add lib

project/$ npm install 

就是这样。

当你想更新东西:

lib/$ yalc push   //this will updated all projects that use your "lib"

project/$ npm install 

使用Docker打包和部署

tar -czvf <compresedFile> <directories and files...>
tar -czvf app.tar .yalc/ build/ src/ package.json package-lock.json

注意:记得添加.yalc目录。

inDocker:

FROM node:lts-alpine3.9

ADD app.tar /app

WORKDIR /app
RUN npm install

CMD [ "node", "src/index.js" ]

完整的纱线用户本地开发指南:

首先在主项目中添加依赖项:

cd main-project
yarn add file:../path/to/your-library

接下来,如果你想避免在每次改变它的源代码时重新构建这个依赖:

cd your-library
yarn link

这将注册一个到你的库的链接。接下来,使用刚刚在主项目中创建的链接。

cd main-project
yarn link your-library

现在,每次更改库中的代码时,您都不需要重新构建它,它将自动包含在主项目中。Yarn link的工作原理是在你的node_modules文件夹中创建符号链接,在这里阅读更多信息:https://classic.yarnpkg.com/lang/en/docs/cli/link/

完整的本地开发有两个步骤:

提供包含包的本地目录的路径。

{ “名称”:“记者”, “依赖”:{ “酒吧”:“文件:. . / foo / bar” } }

符号链接包文件夹 CD ~/projects/node-redis #进入包目录 NPM link #创建全局链接 CD ~/projects/node-bloggy #进入其他包目录。 NPM link redis # link-install包

我想使用一组用TypeScript编写的本地依赖,这里的答案都不适合我。NPM安装会直接拒绝构建依赖项。

我不得不使用tsconfig。Json将包添加到我的项目中,而不将它们标记为依赖项。我的用例更加复杂,因为有些依赖项是相互依赖的,我希望所有依赖项都来自本地文件夹。

以下是我的解决方案:

// tsconfig.json
{
  "compilerOptions": {
    "baseUrl": "./",
    "paths": {
      "@tiptap/*": [
        "tiptap/packages/*/src"
      ]
    }
  }
}

在上面的例子中,我有一个名为tiptap/的本地项目子文件夹,在tiptap/packages/*中有许多包。“路径”选项将重写所有@tiptap/foo导入到。/tiptap/packages/foo/src,包括我自己的文件和tiptap/中的文件。

这不是一个很好的解决方案,但这是唯一对我有效的方法。

用纱线可以这样做

纱线添加文件:../somelocallib