我有完全相同的問題。
我解決了它不是通過複製文件,而是通過將我需要的文件複製到./dist/
文件夾,然後從那裏做npm publish
;然後,NPM將該文件夾視爲一個完整的包,並且一切工作都很好。我需要從根文件夾複製的唯一文件是:
因爲我們將這些文件複製下來到./dist/
文件夾我們發佈前,我們不希望package.json
文件引用./dist/
。因此,完全刪除package.json
的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]:username/my-package.git"
}
現在的發佈步驟。我構建了一個可以爲我執行發佈的gulp任務,使其更好,更自動(除了增加軟件包版本#)。
從gulp我會用Node的spawn()來啓動npm進程。但是,因爲我實際上在Windows上工作,所以我使用的是「cross-spawn」,而不是正常的內置Node.js產卵(當我在路徑中有空間時,我學會了艱難的方式並不奏效)。
這是我一飲而盡文件,移除了打字稿位:
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;
});
});
通知時,我們稱之爲產卵()我們通過在這是選項的第三個參數。這裏的主要條目是cwd:distDir
,它告訴spawn從./dist/目錄運行npm進程。因爲使用spawn可能會導致問題,我已經迷上了spawn錯誤處理。由於我在排除故障時使用了spawn()
,我發現以下StackOverflow文章非常有幫助。
這工作就像一個魅力;我發佈的軟件包包含根目錄中的所有文件,並且./dist/
文件夾未發佈。
將產生的工件放在根上?或者,使用'prepublish'腳本將工件複製到根,然後將其刪除'postpublish'?或者,使用'postinstall'腳本將文件移動到根目錄? – Kenan 2015-04-03 22:08:59