我已经制作了一个NPM软件包来进行响应,它在Node上可以正常工作,但是在没有node的浏览器上不能正常工作。
如果我这样导入节点:
import Progress from 'package-name'
// jsx
<Progress /> //working fine
一切正常。
但是,如果我像unpkg一样从CDN中使用它,它将无法正常工作。
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.4.2/react.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.4.2/react-dom.js"></script>
// Package Script
<script src="https://unpkg.com/@delowar/react-circle-progressbar@0.0.9/lib/Progress.js"></script>
<script>
...react code...
<Progress />
...react code...
</script>
显示错误:
未定义进度
Webpack配置:
var path = require('path');
module.exports = {
mode: 'production',
entry: './src/Progress.js',
output: {
path: path.resolve('lib'),
filename: 'Progress.js',
libraryTarget: 'umd',
library: 'lib',
umdNamedDefine: true,
globalObject: `(typeof self !== 'undefined' ? self : this)`
},
module: {
rules: [
{
test: /\.(js|jsx)$/,
exclude: /(node_modules)/,
use: 'babel-loader'
}
]
}
}
答案 0 :(得分:3)
将library
的值更改为组件library: 'Progress'
的名称,并添加libraryExport: 'default'
以将默认导出分配给库目标:
output: {
path: path.resolve('lib'),
filename: 'Progress.js',
library: 'Progress',
libraryTarget: 'umd',
libraryExport: 'default',
umdNamedDefine: true,
globalObject: `(typeof self !== 'undefined' ? self : this)`
},
工作示例:
function App() {
return (
<Progress />
)
}
ReactDOM.render( <App /> , document.getElementById('root'))
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.4.2/react.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.4.2/react-dom.js"></script>
<script src="https://rawcdn.githack.com/fraction01/react-circle-progressbar/0957fed54db16a3f7b9d625711ed3961f3b34371/lib/Progress.js"></script>
<div id="root"></div>
答案 1 :(得分:0)
您应按照docs中的说明将其配置为外部依赖项。
将此添加到您的webpack配置中:
externals : {
Progress: 'progress'
}
用法:
import Progress from 'progress';
答案 2 :(得分:0)
您不能直接从URL要求或导入模块。
但是您可以像下面那样导入它。
// Package Script
<script src="https://unpkg.com/@delowar/react-circle-progressbar@0.0.9/lib/Progress.js"></script>
const Progress = window.Progress;