基于svelte webpack开发umd格式的npm包
svelte、webpack
index.js
文件就是引入组件,并导出,作为npm
包的入口文件;
注意index.js
不是项目启动时候的main.js
, main.js
是把组件挂载到body
上运行, index.js
只是把组件导出
我这里配置了两个打包命令 npm run build
和 npm run build-npm
, 主要是传了NPM_ENV
参数,用这个参数来区分,webpack
打包的入口文件
webpack
的入口配置如下:
entry: {
bundle: [
...stylesheets,
npm_mode == '1' ? './src/index.js' : './src/main.js'
]
},
项目本地启动 和 正常build 的时候都是使用 main.js
, 只有打包成npm的时候 使用index.js
npm
要想打包成umd
格式的代码,需要在output
里添加, library
libraryTarget
umdNamedDefine
三个字段,代码如下
output: {
path: path.resolve(__dirname, 'public/build'),
publicPath: '/build/',
filename: '[name].js',
chunkFilename: '[name].[id].js',
library: 'YylSvelteNpm', //类库名称
libraryTarget: 'umd', //类库加载方式
umdNamedDefine: true
},
主要有下面几个配置
"private": false,
"version": "0.0.1",
"description": "基于svelte开发npm",
"author": "yyl",
"main": "public/build/bundle.js",
"name": "yyl-svelte-npm",
vue文件代码如下:
<template>
<img alt="Vue logo" src="./assets/logo.png">
<HelloWorld msg="Welcome to Your Vue.js App"/>
</template>
<script>
import HelloWorld from './components/HelloWorld.vue'
import YylSvelteTest from 'yyl-svelte-npm'
export default {
name: 'App',
components: {
HelloWorld
},
mounted() {
setTimeout(() => {
new YylSvelteTest({
target: document.getElementById('aaaa')
})
}, 2000);
}
}
</script>
注意:<div id="aaaa"></div>
不能放在一个异步组件里,否则会找不到,导致报错 我这里直接放在里 index.html
里了
如下就是运行的效果,红色框内 就是npm组件:
<script src="https://abc.com/test/yyl-svelte-npm.js"></script>
这个yyl-svelte-npm.js
就是 打包后的 bundle.js
这里只是改了下名字
const topRow2 = $('#aaaa')[0] // 这里必须加上[0]
new window.YylSvelteNpm.default({target: topRow2});
或者换成一行如下所示:
new window.YylSvelteNpm.default({target: document.getElementById('aaaa')});
注意:不要忘了 id
为 aaaa
的 div
元素