发布一个 React 组件到 npm 并重用它
Publish a react component to npm and reuse it
我正在尝试将一个基本的 React 组件发布到我的 npm 注册表并尝试重用它。我认为我没有遵循正确的方式来分发我的反应组件。这是我拥有的:
这是目录结构:
MyReactPOC
-> main.jsx
-> .npmrc
-> package.json
-> webpack.config.js
main.jsx
import React from 'react';
class MyComponent extends React.Component {
render() {
return (
<div>
<p>Hello from MyComponent!!</p>
</div>
);
}
}
export default MyComponent
package.json
{
"name": "@pankaj/my-component",
"version": "1.0.7",
"description": "POC for importing a component",
"main": "./dist/bundle.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"prepublish": "webpack --config webpack.config.js"
},
"repository": {
"type": "git",
"url": "my git repo"
},
"author": "Pankaj",
"license": "ISC",
"dependencies": {
"react": "~15.5.4",
"react-dom": "~15.5.4"
},
"devDependencies": {
"babel-cli": "~6.24.1",
"babel-core": "~6.24.1",
"babel-loader": "~6.4.1",
"babel-preset-es2015": "~6.24.1",
"babel-preset-react": "~6.24.1",
"webpack": "~2.4.1"
}
}
webpack.config.js
var path = require('path');
var webpack = require('webpack');
module.exports = {
entry: './main.jsx',
output: { path: path.join(__dirname, 'dist'), filename: 'bundle.js' },
module: {
loaders: [
{
test: /.jsx?$/,
loader: 'babel-loader',
exclude: /node_modules/,
query: {
presets: ['es2015', 'react']
}
}
]
},
};
我使用 import MyComponent from '@pankaj/my-component'
在另一个项目中导入模块。
当我像
一样使用这个组件时
我收到以下错误:
React.createElement: type is invalid -- expected a string (for
built-in components) or a class/function (for composite components)
but got: object. You likely forgot to export your component from the
file it's defined in.
请帮助我了解分发 React 组件的正确方法,以便我组织内的其他项目可以使用它们。
下面是我如何使用这个组件:
ComponentUse.js
import React from 'react';
import ReactDOM from 'react-dom';
import MyComponent from '@pankaj/my-component';
ReactDOM.render(
<MyComponent/>,
document.getElementById('root')
);
我有一个 index.html 有 'root' div.
每个 React 组件都需要一个 return 语句。在渲染函数中添加一个 return 语句,它应该可以工作。
...
render() {
return (<div>...</div>)
}
您不能直接从您的 React 组件渲染到 Dom,而是 return 以便 React 可以使用它。
在 webpack 中,使用 output.library https://webpack.js.org/concepts/output/#output-library
将输出文件指定为库
如果您使用 es6 语法和 babel 导出,您的组件将位于 MyComponent.default 命名空间中。为避免这种情况,您应该安装:
npm i --save-dev babel-plugin-add-module-exports in your .babelrc?
并将其添加到 babel conf:
{
"presets": [ "es2015", "react"],
"plugins": ["add-module-exports"]
}
我写了一篇完整的 Medium 故事,因为我遇到了和你一样的问题,但没有相关信息。
检查一下:https://medium.com/@BrodaNoel/how-to-create-a-react-component-and-publish-it-in-npm-668ad7d363ce
主要修复是在 webpack.config.js 文件中添加 libraryTarget: 'umd'
我正在尝试将一个基本的 React 组件发布到我的 npm 注册表并尝试重用它。我认为我没有遵循正确的方式来分发我的反应组件。这是我拥有的:
这是目录结构:
MyReactPOC
-> main.jsx
-> .npmrc
-> package.json
-> webpack.config.js
main.jsx
import React from 'react';
class MyComponent extends React.Component {
render() {
return (
<div>
<p>Hello from MyComponent!!</p>
</div>
);
}
}
export default MyComponent
package.json
{
"name": "@pankaj/my-component",
"version": "1.0.7",
"description": "POC for importing a component",
"main": "./dist/bundle.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"prepublish": "webpack --config webpack.config.js"
},
"repository": {
"type": "git",
"url": "my git repo"
},
"author": "Pankaj",
"license": "ISC",
"dependencies": {
"react": "~15.5.4",
"react-dom": "~15.5.4"
},
"devDependencies": {
"babel-cli": "~6.24.1",
"babel-core": "~6.24.1",
"babel-loader": "~6.4.1",
"babel-preset-es2015": "~6.24.1",
"babel-preset-react": "~6.24.1",
"webpack": "~2.4.1"
}
}
webpack.config.js
var path = require('path');
var webpack = require('webpack');
module.exports = {
entry: './main.jsx',
output: { path: path.join(__dirname, 'dist'), filename: 'bundle.js' },
module: {
loaders: [
{
test: /.jsx?$/,
loader: 'babel-loader',
exclude: /node_modules/,
query: {
presets: ['es2015', 'react']
}
}
]
},
};
我使用 import MyComponent from '@pankaj/my-component'
在另一个项目中导入模块。
当我像
一样使用这个组件时我收到以下错误:
React.createElement: type is invalid -- expected a string (for built-in components) or a class/function (for composite components) but got: object. You likely forgot to export your component from the file it's defined in.
请帮助我了解分发 React 组件的正确方法,以便我组织内的其他项目可以使用它们。
下面是我如何使用这个组件:
ComponentUse.js
import React from 'react';
import ReactDOM from 'react-dom';
import MyComponent from '@pankaj/my-component';
ReactDOM.render(
<MyComponent/>,
document.getElementById('root')
);
我有一个 index.html 有 'root' div.
每个 React 组件都需要一个 return 语句。在渲染函数中添加一个 return 语句,它应该可以工作。
...
render() {
return (<div>...</div>)
}
您不能直接从您的 React 组件渲染到 Dom,而是 return 以便 React 可以使用它。
在 webpack 中,使用 output.library https://webpack.js.org/concepts/output/#output-library
将输出文件指定为库如果您使用 es6 语法和 babel 导出,您的组件将位于 MyComponent.default 命名空间中。为避免这种情况,您应该安装:
npm i --save-dev babel-plugin-add-module-exports in your .babelrc?
并将其添加到 babel conf:
{
"presets": [ "es2015", "react"],
"plugins": ["add-module-exports"]
}
我写了一篇完整的 Medium 故事,因为我遇到了和你一样的问题,但没有相关信息。 检查一下:https://medium.com/@BrodaNoel/how-to-create-a-react-component-and-publish-it-in-npm-668ad7d363ce
主要修复是在 webpack.config.js 文件中添加 libraryTarget: 'umd'