我想这样做,所以npm install也安装../somelocallib的package.json,或者更重要的是它的依赖项。
npm install
../somelocallib
package.json
"dependencies": { "express": "*", "../somelocallib": "*" }
这个特性是npm 2.0.0版本中的实现。本地路径可以使用npm install -S或npm install --save保存,使用以下任何一种形式:
npm install -S
npm install --save
../foo/bar ~/foo/bar ./foo/bar /foo/bar
例# EYZ0:
{ "name": "baz", "dependencies": { "bar": "file:../foo/bar" } }
# EYZ0:
app@0.0.1 /private/tmp/app └── somelocallib@0.0.1 -> /private/tmp/somelocallib
将somelocallib作为依赖项放在package.json中。
somelocallib
"dependencies": { "somelocallib": "0.0.x" }
然后运行npm link ../somelocallib, npm将安装你正在使用的版本作为符号链接。
npm link ../somelocallib
参考:# EYZ0
我知道npm install ../somelocallib可以工作。
npm install ../somelocallib
然而,我不知道你在问题中显示的语法是否从package.json开始工作…
不幸的是,医生似乎只提到URL作为依赖项。
尝试file:///.../...tar.gz,指向一个压缩的本地库…告诉我们它是否有效。
file:///.../...tar.gz
如果你想进一步自动化这个,因为你正在将你的模块检入版本控制,并且不想依赖于开发人员记住npm link,你可以将这个添加到你的包中。Json“脚本”部分:
"scripts": { "postinstall": "npm link ../somelocallib", "postupdate": "npm link ../somelocallib" }
这对我来说很有效:首先,确保npm目录有正确的用户
sudo chown -R myuser ~/.npm sudo chown -R myuser /usr/local/lib/node_modules
那你就在你的包裹里。Json链接目录
"scripts": { "preinstall": "npm ln mylib ../../path/to/mylib" }, "dependencies": { "mylib" : "*" }
这对我很有用。
将以下内容放入包中。json文件
"scripts": { "preinstall": "npm install ../my-own-module/" }
现在可以直接在package.json中指定本地Node模块安装路径。从文档中可以看出:
本地路径 从2.0.0版本开始,您可以提供到包含包的本地目录的路径。本地路径可以使用npm install -S或npm install --save保存,使用以下任何一种形式: ../foo/bar ~/foo/bar ./foo/bar /foo/bar 在这种情况下,它们将被规范化为一个相对路径,并添加到package.json。例如: { "name": "baz", "dependencies": { "bar": "file:../foo/bar" } } 这个特性对本地脱机开发和创建需要安装npm的测试很有帮助,因为你不想在外部服务器上安装npm,但是在将包发布到公共注册表时不应该使用。
从2.0.0版本开始,您可以提供到包含包的本地目录的路径。本地路径可以使用npm install -S或npm install --save保存,使用以下任何一种形式:
在这种情况下,它们将被规范化为一个相对路径,并添加到package.json。例如:
这个特性对本地脱机开发和创建需要安装npm的测试很有帮助,因为你不想在外部服务器上安装npm,但是在将包发布到公共注册表时不应该使用。
实际上,从npm 2.0开始,现在支持本地路径(参见在这里)。
好奇……至少在Windows上(我的npm是3.something),我需要做:
"dependencies": { "body-parser": "^1.17.1", "module1": "../module1", "module2": "../module2",
当我执行npm install ../module1 --save时,它会导致绝对路径,而不是相对于文档。
npm install ../module1 --save
我稍微改变了一下,并确定../xxx就足够了。
../xxx
具体地说,我有本地节点模块检出说d:\build\module1, d:\build\module2和我的节点项目(应用程序)在d:\build\nodeApp。
为了“安装”,我:
d:\build\module1> rmdir "./node_modules" /q /s && npm install d:\build\module2> rmdir "./node_modules" /q /s && npm install d:\build\nodeApp> rmdir "./node_modules" /q /s && npm install
module1的包。Json有一个依赖项"module2": "../module2";Module2没有本地依赖;nodeApp有依赖"module1": ".."../ module1"和"module2": "../module2"。
不确定这是否只适用于我,因为所有3个文件夹(module1, module2和nodeApp)都位于同一个级别.......
这是如何添加本地依赖项的:
# EYZ0
把它添加到包中。json来自NPM:
直接添加到包。Json是这样的:
.... "angular2-autosize": "1.0.1", "angular2-text-mask": "8.0.2", "animate.css": "3.5.2", "LIBRARY_NAME": "file:src/assets/js/FILE_NAME" ....
完整的本地开发有两个步骤:
cd ~/projects/node-redis # go into the package directory npm link # creates global link cd ~/projects/node-bloggy # go into some other package directory. npm link redis # link-install the package
这是包裹。Json,你将用于主项目:
"dependencies": { "express": "*", "somelocallib": "file:./somelocallib" }
其中,./somelocallib是对库文件夹相对于主项目package.json的引用。
./somelocallib
处理你的库依赖项。
除了运行npm install之外,还需要运行(cd node_modules/somelocallib && npm install)。
(cd node_modules/somelocallib && npm install)
这是一个已知的NPM错误。
参考资料:https://github.com/npm/npm/issues/1341(寻找最新的参考资料)
检入您的主package.lock和somelocallib/package.lock到您的源代码管理器。
package.lock
somelocallib/package.lock
然后在Dockerfile中使用:
FROM node:10 WORKDIR /app # ... COPY ./package.json ./package-lock.json ./ COPY somelocallib somelocallib RUN npm ci RUN (cd node_modules/zkp-utils/ && npm ci) # ...
我在我的(cd A && B)结构中使用了圆括号,使操作是幂等的。
(cd A && B)
在2020年的这里,我正在用Windows 10操作系统工作
"dependencies": { "some-local-lib": "file:../../folderY/some-local-lib" ... }
npm
node-modules
因为我不是真的想要一个硬链接,我尝试使用一个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" ]
用纱线可以这样做
我想使用一组用TypeScript编写的本地依赖,这里的答案都不适合我。npm install将拒绝构建依赖项。
我不得不使用tsconfig.json将包添加到我的项目没有,将它们标记为依赖项。我的用例更加复杂,因为有些依赖项是相互依赖的,我希望其中的所有来自本地文件夹。
tsconfig.json
以下是我的解决方案:
// tsconfig.json { "compilerOptions": { "baseUrl": "./", "paths": { "@tiptap/*": [ "tiptap/packages/*/src" ] } } }
在上面的例子中,我有一个名为tiptap/的本地项目子文件夹,在tiptap/packages/*中有许多包。"paths"选项将重写所有@tiptap/foo导入到./tiptap/packages/foo/src中,包括我自己的文件和tiptap/中的文件。
tiptap/
tiptap/packages/*
"paths"
@tiptap/foo
./tiptap/packages/foo/src
这不是一个很好的解决方案,但这是唯一对我有效的方法。
在2021年,你需要这样使用它:
npm i my-pkg@file:./path-to-my-pkg.js # To remove it later npm un my-pkg
如果它的文件或路径到包含package.json的完整包的文件夹,最后使用.js。
.js
使用
const myPkg = require('my-pkg')
这很有魅力!
完整的本地开发指南纱用户:
首先在主项目中添加依赖项:
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/