我正要把一个模块发布到NPM,这时我想用ES6重写它,既要面向未来,又要学习ES6。我已经使用Babel转换成ES5,并运行测试。但我不确定该怎么做:
简而言之:我需要采取哪些步骤来将用ES6编写的模块发布到NPM,同时仍然允许人们浏览/派生原始代码?
发布于 2015-04-20 10:32:51
到目前为止,我看到的模式是将es6文件保存在src
目录中,并在npm的预发布到lib
目录中构建您的内容。
您将需要一个类似于.gitignore的.npmignore文件,但忽略src
而不是lib
。
发布于 2015-11-29 04:46:10
我喜欢José的回答。我注意到已经有几个模块遵循了这个模式。下面是你可以轻松地用Babel6实现它的方法。我在本地安装babel-cli
,所以如果我改变我的全局babel版本,构建就不会中断。
.npmignore
/src/
.gitignore
/lib/
/node_modules/
安装Babel
npm install --save-dev babel-core babel-cli babel-preset-es2015
package.json
{
"main": "lib/index.js",
"scripts": {
"prepublish": "babel src --out-dir lib"
},
"babel": {
"presets": ["es2015"]
}
}
发布于 2015-09-19 23:04:38
@Jose是对的。将ES6/ES2015发布到NPM没有什么问题,但这可能会带来麻烦,特别是如果使用您的软件包的人正在使用Webpack,例如,因为出于性能原因,通常人们在使用babel
进行预处理时会忽略node_modules
文件夹。
因此,只需使用gulp
、grunt
或简单的Node.js来构建一个lib
文件夹,即ES5。
下面是我的build-lib.js
脚本,我将其保存在./tools/
中(这里没有gulp
或grunt
):
var rimraf = require('rimraf-promise');
var colors = require('colors');
var exec = require('child-process-promise').exec;
console.log('building lib'.green);
rimraf('./lib')
.then(function (error) {
let babelCli = 'babel --optional es7.objectRestSpread ./src --out-dir ./lib';
return exec(babelCli).fail(function (error) {
console.log(colors.red(error))
});
}).then(() => console.log('lib built'.green));
最后一个建议:你需要在你的中添加一个.npmignore。如果npm publish
找不到这个文件,它将改用.gitignore
,这会给你带来麻烦,因为通常你的.gitignore
文件会排除./lib
并包含./src
,这与你发布到NPM时想要的正好相反。.npmignore
文件的语法与.gitignore
(AFAIK)基本相同。
https://stackoverflow.com/questions/29738381
复制相似问题