我想做这样的事情,所以npm install
还要安装package.json
of../somelocallib
或更重要的是它的依赖项。
"dependencies": {
"express": "*",
"../somelocallib": "*"
}
此功能在 npm 的 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 ls
:
app@0.0.1 /private/tmp/app
└── somelocallib@0.0.1 -> /private/tmp/somelocallib
像往常somelocallib
一样作为依赖package.json
项:
"dependencies": {
"somelocallib": "0.0.x"
}
然后运行npm link ../somelocallib
,npm 会将您正在使用的版本安装为 symlink。
参考:链接(1)
现在可以在您的package.json
直接指定本地节点模块安装路径。从文档:
本地路径
从 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 安装的测试,您不想访问外部服务器,但不应在将包发布到公共注册表时使用。
这对我有用。
将以下内容放在您的 package.json 文件中
"scripts": {
"preinstall": "npm install ../my-own-module/"
}
如果您想进一步自动化此操作,因为您将模块检查到版本控制中,并且不想依赖开发人员记住 npm 链接,您可以将其添加到您的 package.json “脚本”部分:
"scripts": {
"postinstall": "npm link ../somelocallib",
"postupdate": "npm link ../somelocallib"
}
这感觉超出了hacky,但它似乎“有效”。从这个 npm 问题中得到提示: https ://github.com/npm/npm/issues/1558#issuecomment-12444454
这是添加本地依赖项的方式:
npm install file:src/assets/js/FILE_NAME
从 NPM 将其添加到 package.json:
npm install --save file:src/assets/js/FILE_NAME
像这样直接添加到 package.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"
....
这是您将用于主项目的 package.json:
"dependencies": {
"express": "*",
"somelocallib": "file:./somelocallib"
}
那里是相对于主项目 package.json./somelocallib
对库文件夹的引用。
参考:https ://docs.npmjs.com/cli/v7/configuring-npm/package-json#local-paths
处理您的库依赖项。
除了跑步npm install
,你还需要跑步(cd node_modules/somelocallib && npm install)
。
这是 NPM 的一个已知错误。
参考:https ://github.com/npm/npm/issues/1341 (寻求更新的参考)
检查你的主人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)
构造中使用括号来使操作具有幂等性。
完成本地开发的两个步骤:
{ "name": "baz", "dependencies": { "bar": "file:../foo/bar" } }
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
在 2020 年,我在 Windows 10 上工作,我尝试使用
"dependencies": {
"some-local-lib": "file:../../folderY/some-local-lib"
...
}
然后进行npm
安装。结果是创建了文件夹的快捷方式node-modules
。这行不通。你需要一个硬链接——windows 支持它,但是你必须在 windows 中做一些额外的事情来创建一个硬符号链接。
因为我真的不想要硬链接,所以我尝试使用 url 代替:
"dependencies": {
"some-local-lib": "file:///D:\\folderX\\folderY\\some-local-lib.tar"
....
}
这很好用。
tar(您必须对库的 build / dist 文件夹中的内容进行 tar 处理)被提取到节点模块中的真实文件夹中,并且您可以像其他所有内容一样导入。
显然 tar 部分有点烦人,但由于“some-local-lib”是一个库(无论如何都必须构建),我更喜欢这个解决方案来创建硬链接或安装本地 npm。
我知道那npm install ../somelocallib
行得通。
但是,我不知道您在问题中显示的语法是否适用于package.json
...
不幸的是,doc似乎只提到 URL 作为依赖项。
尝试file:///.../...tar.gz
,指向一个压缩的本地库......并告诉我们它是否有效。
好奇.....至少在 Windows 上(我的 npm 是 3.something)我需要做:
"dependencies": {
"body-parser": "^1.17.1",
"module1": "../module1",
"module2": "../module2",
当我这样做时,npm install ../module1 --save
它会导致绝对路径,而不是文档中的相对路径。
我又搞砸了一点,并确定这就../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 的 package.json 有一个依赖 "module2": "../module2"; module2 没有本地依赖;nodeApp 具有依赖项“module1”:“../module1”和“module2”:“../module2”。
不确定这是否只对我有用,因为所有 3 个文件夹(module1、module2 和 nodeApp)都位于同一级别......
这对我有用:首先,确保 npm 目录有正确的用户
sudo chown -R myuser ~/.npm
sudo chown -R myuser /usr/local/lib/node_modules
然后你在你的 package.json 链接目录
"scripts": {
"preinstall": "npm ln mylib ../../path/to/mylib"
},
"dependencies": {
"mylib" : "*"
}
使用纱线可以做到
yarn add file:../somelocallib
实际上,从 npm 2.0 开始,现在支持本地路径(参见此处)。
我想使用一组用 TypeScript 编写的本地依赖项,但这里没有一个答案对我有用。npm install
只会拒绝构建依赖项。
我不得不求助于tsconfig.json
将包添加到我的项目中而不将它们标记为依赖项。由于某些依赖项相互依赖,我的用例变得更加复杂,我希望它们都来自本地文件夹。
这是我的解决方案:
// tsconfig.json
{
"compilerOptions": {
"baseUrl": "./",
"paths": {
"@tiptap/*": [
"tiptap/packages/*/src"
]
}
}
}
在上面的示例中,我有一个名为的本地项目子文件夹tiptap/
,并且tiptap/packages/*
. 该"paths"
选项将@tiptap/foo
在./tiptap/packages/foo/src
我自己的文件和tiptap/
.
这不是一个好的解决方案,但它是唯一对我有用的东西。
有很棒的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目录。
在Docker中:
FROM node:lts-alpine3.9
ADD app.tar /app
WORKDIR /app
RUN npm install
CMD [ "node", "src/index.js" ]
在 2021 年,您需要像这样使用它:
npm i my-pkg@file:./path-to-my-pkg.js
# To remove it later
npm un my-pkg
最后使用.js
它的文件或文件夹的路径,如果它的完整包带有package.json
.
用法
const myPkg = require('my-pkg')
这就像魅力!