将目录中的文件拖入NPM的根文件夹

问题描述:

我正在将库发布到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

我有完全相同的问题。

我解决了它不是通过复制文件,而是通过将我需要的文件复制到./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/文件夹未发布。