我希望能够在发布npm包的内容之前运行脚本,以查看是否所有必需的文件都存在。我们最近有一些已发布的软件包丢失了,因为它们与.npmignore
中的模式错误匹配。
这可能吗? npm install . -g
将/usr/local/lib/node_modules/mypackage
中的完全相同的内容与NPM
上的<{1}}基本上相同吗?
答案 0 :(得分:3)
npm pack --dry-run
会将要发布的文件输出到stderr,而无需对文件系统进行任何更改。
npm notice ? @some/package@0.2.38
npm notice === Tarball Contents ===
npm notice 641B package.json
npm notice 961B src/index.js
npm notice === Tarball Details ===
npm notice name: @some/package
npm notice version: 0.2.38
npm notice filename: some-package-0.2.38.tgz
npm notice package size: 1 kB
npm notice unpacked size: 1.5 kB
npm notice shasum: somesha
npm notice integrity: someothersha
npm notice total files: 2
您可以使用不存在的文件(例如
)在该文件列表中声明> npm pack --dry-run 2>&1 >/dev/null | grep src/someFileNotInPackage.js
> echo $?
1
注意1,错误退出代码。
或在确实存在的文件上:
> npm pack --dry-run 2>&1 >/dev/null | grep src/index.js
> echo $?
0
注意0,成功退出代码。
答案 1 :(得分:1)
似乎你可以这样做:
check_files(){
for f in $@; do
if [[ ! -e $f ]]; then
echo "Missing $f" && exit 1
fi
done
}
pkg=foo-module
npm pack;
check_files $(tar -tf ${pkg}.tgz)
rm $pkg.tgz
未经测试,提供补丁:)
答案 2 :(得分:0)
我在Windows上使用Git Bash运行npm pack && tar -xvzf *.tgz | cut -c9- && rm -rf package *.tgz
,以列出要包含在已发布软件包中的所有文件。
例如,在axios repository上运行脚本:
git clone https://github.com/axios/axios.git
cd axios
npm install
npm run build
打包,提取归档文件,修剪package/
前缀并随后进行清理:
npm pack && tar -xvzf *.tgz | cut -c9- && rm -rf package *.tgz
这将导致要部署的软件包中包含的文件列表:
axios-0.19.0.tgz
LICENSE
dist/axios.js
lib/axios.js
lib/core/Axios.js
dist/axios.min.js
lib/helpers/bind.js
lib/core/buildFullPath.js
lib/helpers/buildURL.js
lib/cancel/Cancel.js
lib/cancel/CancelToken.js
lib/helpers/combineURLs.js
lib/helpers/cookies.js
lib/core/createError.js
lib/defaults.js
lib/helpers/deprecatedMethod.js
lib/core/dispatchRequest.js
lib/core/enhanceError.js
lib/adapters/http.js
index.js
lib/core/InterceptorManager.js
lib/helpers/isAbsoluteURL.js
lib/cancel/isCancel.js
lib/helpers/isURLSameOrigin.js
lib/helpers/isValidXss.js
lib/core/mergeConfig.js
lib/helpers/normalizeHeaderName.js
lib/helpers/parseHeaders.js
lib/core/settle.js
lib/helpers/spread.js
lib/core/transformData.js
lib/utils.js
lib/adapters/xhr.js
package.json
dist/axios.map
dist/axios.min.map
CHANGELOG.md
lib/adapters/README.md
lib/core/README.md
lib/helpers/README.md
README.md
UPGRADE_GUIDE.md
index.d.ts
应该跳过第一行,因为它是归档文件的名称(软件包和版本)。