2015-04-03 60 views
5

我正在將庫發佈到NPM。將目錄中的文件拖入NPM的根文件夾

當我構建庫時,產生的工件放置在dist文件夾中,該文件夾位於我的項目根目錄中index.js

當用戶從安裝NPM我想index.js是存在於根在自己node_modules文件夾中創建的文件夾的。目前,它仍在名爲dist的目錄中。

我該怎麼做?

我packages.json:

{ 
    "name": "my-package", 
    "version": "0.0.9", 
    "files": ["dist/*"], 
    "main": "index.min.js", 
    "private": false, 
    "dependencies": {}, 
    "devDependencies": {}, 
    "repository": "[email protected]:username/my-package.git" 
} 
+1

將產生的工件放在根上?或者,使用'prepublish'腳本將工件複製到根,然後將其刪除'postpublish'?或者,使用'postinstall'腳本將文件移動到根目錄? – Kenan 2015-04-03 22:08:59

回答

1

我有完全相同的問題。

我解決了它不是通過複製文件,而是通過將我需要的文件複製到./dist/文件夾,然後從那裏做npm publish;然後,NPM將該文件夾視爲一個完整的包,並且一切工作都很好。我需要從根文件夾複製的唯一文件是:

  • package.json
  • README.md

因爲我們將這些文件複製下來到./dist/文件夾我們發佈前,我們不希望package.json文件引用./dist/。因此,完全刪除package.jsonfiles條目,因爲我們不需要告訴它我們將採用哪些文件 - 我們將採取./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/文件夾未發佈。

相關問題