将目录中的文件拖入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"
}
我有完全相同的问题。
我解决了它不是通过复制文件,而是通过将我需要的文件复制到./dist/
文件夹,然后从那里做npm publish
;然后,NPM将该文件夹视为一个完整的包,并且一切工作都很好。我需要从根文件夹复制的唯一文件是:
package.json
README.md
因为我们将这些文件复制下来到./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