我可以在发布之前检查npm包的内容吗?

时间:2017-03-01 14:21:11

标签: node.js npm

我希望能够在发布npm包的内容之前运行脚本,以查看是否所有必需的文件都存在。我们最近有一些已发布的软件包丢失了,因为它们与.npmignore中的模式错误匹配。

这可能吗? npm install . -g/usr/local/lib/node_modules/mypackage中的完全相同的内容NPM上的<{1}}基本上相同吗?

3 个答案:

答案 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

应该跳过第一行,因为它是归档文件的名称(软件包和版本)。