我有完全相同的问题。
我不是通过向上复制文件来解决这个问题,而是通过将我需要的文件向下复制到./dist/
文件夹,然后执行npm publish
从那里;然后,NPM 将该文件夹视为一个完整的包,一切都运行良好。我需要从根文件夹复制的唯一文件是:
因为我们要将这些文件复制到./dist/
在我们发布之前的文件夹中,我们不希望package.json
参考文件./dist/
。所以删除package.json
's files
完全输入,因为我们不需要告诉它我们将获取哪些文件 - 我们将获取其中的所有内容./dist/
文件夹。我正在使用 TypeScript,所以我也有一个typings
条目,并且再次没有提及./dist/
.
{
"name": "my-package",
"version": "0.0.9",
"main": "index.min.js",
"typings": "index.d.ts",
"private": false,
"dependencies": {},
"devDependencies": {},
"repository": "[email protected] /cdn-cgi/l/email-protection:username/my-package.git"
}
现在进行发布步骤。我构建了一个 gulp 任务,它将为我执行发布,使其变得漂亮且自动化(除了增加包版本 # 之外)。
从 gulp 中,我将使用 Node 的 spawn() 来启动 npm 进程。然而,因为我实际上是在 Windows 上工作,所以我使用了“交叉生成 https://www.npmjs.com/package/cross-spawn“而不是普通的内置 Node.js 生成(当我的路径中有空格时,我通过艰难的方式了解到它不起作用!)。
这是我的 gulp 文件,删除了 TypeScript 位:
var gulp = require('gulp');
var del = require('del');
var spawn = require('cross-spawn'); // WAS: require('child_process').spawn;
var config = {
src: { tsFiles: './src/**/*.ts' },
out: { path: './dist/' }
}
gulp.task('clean', () => {
return del('dist/*');
});
gulp.task('build', ['clean'], () => {
....
});
gulp.task('publish', ['build'], (done) => {
// Copy the files we'll need to publish
// We just use built-in gulp commands to do the copy
gulp.src(['package.json', 'README.md']).pipe(gulp.dest(config.out.path));
// We'll start the npm process in the dist directory
var outPath = config.out.path.replace(/(\.)|(\/)/gm,'');
var distDir = __dirname + '\\' + outPath + '\\';
console.log("dist directory = " + distDir);
// Start the npm process
spawn('npm', ['publish'], { stdio:'inherit', cwd:distDir } )
.on('close', done)
.on('error', function(error) {
console.error(' Underlying spawn error: ' + error);
throw error;
});
});
请注意,当我们调用 spawn() 时,我们传递了第三个参数,即选项。这里的主要条目是cwd:distDir
,它告诉spawn从./dist/目录运行npm进程。因为使用spawn可能会导致问题,所以我已经加入spawn错误处理。当我对我的使用进行故障排除时spawn()
我发现了以下内容堆栈溢出 https://stackoverflow.com/questions/27688804/how-do-i-debug-error-spawn-enoent-on-node-js文章非常有帮助。
这就像一种魅力。我发布的包包含根目录中的所有文件和./dist/
文件夹未发布。