我想这样做,所以npm install也会安装这个包。Json的../somelocallib或者更重要的是它的依赖项。
"dependencies": {
"express": "*",
"../somelocallib": "*"
}
我想这样做,所以npm install也会安装这个包。Json的../somelocallib或者更重要的是它的依赖项。
"dependencies": {
"express": "*",
"../somelocallib": "*"
}
当前回答
主项目
这是包裹。Json,你将用于主项目:
"dependencies": {
"express": "*",
"somelocallib": "file:./somelocallib"
}
其中,./somelocallib是相对于主项目package.json的库文件夹的引用。
参考: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(寻求最新的参考资料)
Docker注意事项
检查主包。锁和你的somelocallib/package。锁定到源代码管理器中。
然后在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)结构中使用括号,以使操作幂等。
其他回答
现在可以在包中指定本地Node模块安装路径。直接json。从文档中可以看出:
Local Paths As of version 2.0.0 you can provide a path to a local directory that contains a package. Local paths can be saved using npm install -S or npm install --save, using any of these forms: ../foo/bar ~/foo/bar ./foo/bar /foo/bar in which case they will be normalized to a relative path and added to your package.json. For example: { "name": "baz", "dependencies": { "bar": "file:../foo/bar" } } This feature is helpful for local offline development and creating tests that require npm installing where you don't want to hit an external server, but should not be used when publishing packages to the public registry.
主项目
这是包裹。Json,你将用于主项目:
"dependencies": {
"express": "*",
"somelocallib": "file:./somelocallib"
}
其中,./somelocallib是相对于主项目package.json的库文件夹的引用。
参考: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(寻求最新的参考资料)
Docker注意事项
检查主包。锁和你的somelocallib/package。锁定到源代码管理器中。
然后在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)结构中使用括号,以使操作幂等。
如果你想进一步自动化这个,因为你正在将你的模块检入版本控制,并且不想依赖于开发人员记住npm link,你可以将这个添加到你的包中。Json“脚本”部分:
"scripts": {
"postinstall": "npm link ../somelocallib",
"postupdate": "npm link ../somelocallib"
}
这感觉很俗气,但似乎很“管用”。从这个npm问题中得到了提示: https://github.com/npm/npm/issues/1558#issuecomment-12444454
NPM >= 2.0.0
该特性在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
NPM < 2.0.0
在包中放入somelocallib作为依赖项。正常的Json:
"dependencies": {
"somelocallib": "0.0.x"
}
然后运行npm link ../somelocallib和NPM会将你正在使用的版本作为符号链接安装。
参考:链接(1)
有一个很棒的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" ]