From e8bfdd788c20d80f51b2544dab03cba12434fa87 Mon Sep 17 00:00:00 2001 From: Ciro Nunes Date: Tue, 21 May 2019 20:26:41 +1000 Subject: [PATCH] Warn if no files field in package.json or .npmignore file present --- source/npm/util.js | 16 +++++++++++++++- source/ui.js | 4 +++- source/util.js | 6 ++++++ 3 files changed, 24 insertions(+), 2 deletions(-) diff --git a/source/npm/util.js b/source/npm/util.js index fbc5102e..fc8a7ea6 100644 --- a/source/npm/util.js +++ b/source/npm/util.js @@ -1,9 +1,13 @@ 'use strict'; +const {existsSync} = require('fs'); +const path = require('path'); const execa = require('execa'); const pTimeout = require('p-timeout'); const ow = require('ow'); const npmName = require('npm-name'); -const {verifyRequirementSatisfied} = require('../version'); +const chalk = require('chalk'); +const {versionSatisfiesRequirement} = require('../version'); +const {getRootDir} = require('../util'); exports.checkConnection = () => pTimeout( (async () => { @@ -87,3 +91,13 @@ exports.verifyRecentNpmVersion = async () => { const npmVersion = await exports.version(); verifyRequirementSatisfied('npm', npmVersion); }; + +exports.checkIgnoreStrategy = ({files}) => { + const npmignoreExists = existsSync(path.resolve(getRootDir(), '.npmignore')); + + if (!files && !npmignoreExists) { + console.log(` + \n${chalk.bold.yellow('Warning:')} No ${chalk.bold.cyan('files')} field specified in ${chalk.bold.magenta('package.json')} nor ${chalk.bold.magenta('.npmignore')} file present. Setting one of those will prevent you from accidentally publishing development-specific files along with your package's source code to npm. + `); + } +}; diff --git a/source/ui.js b/source/ui.js index 26ef5524..b29377ad 100644 --- a/source/ui.js +++ b/source/ui.js @@ -5,7 +5,7 @@ const githubUrlFromGit = require('github-url-from-git'); const isScoped = require('is-scoped'); const util = require('./util'); const git = require('./git-util'); -const {prereleaseTags} = require('./npm/util'); +const {prereleaseTags, checkIgnoreStrategy} = require('./npm/util'); const version = require('./version'); const prettyVersionDiff = require('./pretty-version-diff'); @@ -54,6 +54,8 @@ module.exports = async (options, pkg) => { const extraBaseUrls = ['gitlab.com']; const repoUrl = pkg.repository && githubUrlFromGit(pkg.repository.url, {extraBaseUrls}); + checkIgnoreStrategy(pkg); + console.log(`\nPublish a new version of ${chalk.bold.magenta(pkg.name)} ${chalk.dim(`(current: ${oldVersion})`)}\n`); const prompts = [ diff --git a/source/util.js b/source/util.js index 8d1f1ed8..c71fcfee 100644 --- a/source/util.js +++ b/source/util.js @@ -1,4 +1,5 @@ 'use strict'; +const path = require('path'); const readPkgUp = require('read-pkg-up'); const issueRegex = require('issue-regex'); const terminalLink = require('terminal-link'); @@ -61,3 +62,8 @@ exports.getTagVersionPrefix = pMemoize(async options => { return 'v'; } }); + +exports.getRootDir = () => { + const sourceDir = path.dirname(require.main.filename); + return path.resolve(sourceDir, '..'); +};