创建NPM包
我们以cnpm创建一个lang为例, 并以webpack build的项目作为检验工具
创建目录
$ mkdir lang && cd lang
初始化npm包
$ cnpm init
依次按提示填完后生成一个package.json
{
"name": "@cjt/lang",
"version": "0.1.0",
"description": "常用函数工具库",
"main": "src/lang.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [
"lang"
],
"author": "guopeng",
"license": "ISC"
}
添加src目录并在其下创建lang.js.
lang.js
/**
* Created with WebStorm.
* User: gp
* Date: 16-2-19
*
*/
const lang = {
byId: (id) => document.getElementById(id)
}
export default lang;
发布包
完成以上的操作我们就可以发布包了
$ cnpm publish
发布完成后,我们在实际项目中作下验证:
- 安装包
$ cnpm install @cjt/lang --save
- 在代码中引入
import lang from '@cjt/lang';
- 调用方法:
lang.byId('app')
启动项目。
这时会提示错误:
ERROR in ./~/@cjt/lang/src/lang.js
Module parse failed:
/Users/guopeng/disk/plat/dev_env/node_modules/@cjt/lang/src/lang.js
Line 12: Unexpected token
You may need an appropriate loader to handle this file type.
| }
|
| export default lang;
|
@ ./src/js/app.js 45:12-32
Module parse failed:
/Users/guopeng/disk/plat/dev_env/node_modules/@cjt/lang/src/lang.js
Line 12: Unexpected token
You may need an appropriate loader to handle this file type.
| }
|
| export default lang;
|
@ ./src/js/app.js 45:12-32
为什么为解析失败? 是因为我们npm包中使用了ES6的语法,而在我本地的项目webpack配置中并没有对第三方的npm包进行ES5转码。
loaders:[
{
test: /\.js$/,
loader: 'babel',
exclude: path.join(__dirname,'/node_modules/'),
query:
{
presets:['react']
}
}
]
我们提供的npm包不能期望每个使用者在调用时自己作转码。所以我们提供给用户的应该是一个已编译过的npm包。
编译npm ES6代码
我们使用babel来转码
修改package.json
"main": "lib/lang.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"compile": "babel -d lib/ src/",
"prepublish": "npm run compile"
},
"devDependencies": {
"babel-cli": "^6.3.17",
"babel-preset-es2015": "^6.0.0"
},
添加.babelrc文件
{
"presets": ["es2015"]
}
安装依赖、重新发布
$ cnpm install
$ cnpm publish
再启动项目我们看到已可以成功启动并正常运行。
package.json修改说明
"main": "src/lang.js",
改为"main": "lib/lang.js",
src是我们源代码目录,lib是编译后生成的目录。"compile": "babel -d lib/ src/",
在scripts中添加了babel编译指令"prepublish": "npm run compile"
,prepublish
指令会在每次publish
之前执行
选择文件发布
有时我们发布时可能会不想发布文件目录中某些文件如:src,只需添加一个 .npmigonre文件,将不想发布的文件配置进去
.idea
src
.babelrc
webpack.config.js
.npmignore