将文件从目录拉入NPM的根文件夹

时间:2015-04-03 19:22:00

标签: npm

我正在向NPM发布图书馆。

当我构建库时,生成的工件将作为dist放置在项目根目录中的index.js文件夹中。

当用户从NPM安装时,我希望index.js出现在node_modules文件夹中创建的文件夹的 root 中。目前,它仍保留在名为dist

的目录中

我该怎么做?

我的packages.json:

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

1 个答案:

答案 0 :(得分:2)

我有完全相同的问题。

我解决了这个问题,不是通过复制文件,而是将我需要的文件复制到./dist/文件夹中,然后从那里做npm publish; NPM然后将该文件夹视为一个完整的包,一切都很好。我需要从根文件夹复制的唯一文件是:

  • package.json
  • README.md

由于我们要在发布之前将这些文件复制到./dist/文件夹中,因此我们不希望package.json文件引用./dist/。因此,请完全删除package.json的{​​{1}}条目,因为我们无需告诉它我们将采用哪些文件 - 我们将把files文件夹中的所有文件都删除。我正在使用TypeScript,因此我还有一个./dist/条目,并且再次没有引用typings

./dist/

现在进行发布步骤。我构建了一个gulp任务,它将为我执行发布,使其很好并且自动化(除了增加包版本#)。

从gulp我将使用Node的spawn()来启动npm进程。但是,因为我实际上在Windows上使用“cross-spawn”,而不是普通的内置Node.js spawn(当我在路径中有空格时,我学到了很难的方法!)

这是我的gulp文件,删除了TypeScript位:

{
  "name": "my-package",
  "version": "0.0.9",
  "main": "index.min.js",
  "typings": "index.d.ts",
  "private": false,
  "dependencies": {},
  "devDependencies": {},
  "repository": "git@github.com:username/my-package.git"
}

注意当我们调用spawn()时,我们传入第三个参数,即参数。这里的主要条目是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从./dist/目录运行npm进程。因为使用spawn会导致问题,我已经挂钩到spawn错误处理。在我使用cwd:distDir进行故障排除时,我发现以下StackOverflow文章非常有用。

这就像一个魅力;我发布的包中包含根目录中的所有文件,并且spawn()文件夹未发布。