我想这样做,所以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.
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)
使用工作空间
使用该文件的缺点:../path/to/your-library是你必须安装NPM或使用NPM link,以使更改在导入你的包的包中生效。
如果你使用pnpm:一个更好的解决方案是使用workspace: protocol: workspace:../path/to/your-library。它会将目录符号链接到您的node_modules目录,而不是复制它,因此源上的任何更改都会立即生效。
例如:
...
"dependencies": {
...
"my-package": "workspace:../../dist"
},
注意:此解决方案打算在工作空间中使用,因此可能需要创建pnpm-workspace。Yaml(甚至是一个空文件)文件在您的项目的根。
好奇……至少在Windows上(我的npm是3.something),我需要做:
"dependencies": {
"body-parser": "^1.17.1",
"module1": "../module1",
"module2": "../module2",
当我做npm安装../module1——保存它会导致绝对路径,而不是文档中的相对路径。
我又瞎折腾了一下,然后决定…/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)都位于同一个级别.......
有一个很棒的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" ]