关于Vue2插件开发最佳实践的问题

现在我有一个App需要一个插件(因为考虑到另一个App还会用到),这个插件依赖了axios这个库(调用一些RESTful API),发现插件打包以后axios也被打入其中,但其实App本身使用了axios,这就发生了重复,App打包后无谓的增加了体积。

当然我更希望我的插件能使用App提供的axios实例,因为有一些公共请求配置,比如从store中获取access_token设置请求头。希望能有高人给一个最佳实践的思路。

补充:
简单说就是,插件所依赖的某个特定的库,我希望是使用这个插件的那一方提供;就像开发一个jQuery插件,插件又依赖了另一个开源库(比如Bootstrap的某个插件),那这个jQuery插件大可不必将它依赖的那个库打包在一起,可以由用户使用的时候自己引入。
2017年06月17日07:58:14

阅读 2.7k
3 个回答

我感觉可能是因为axios的版本不一样,把app用的和插件依赖的版本改成一致的试试看
然后配置一下webpack的externals

把package.json中dependencies下的axios移到devDependencies下,然后重新打包就可以了

公共插件项目:

test.js

import myHttp from 'MyHttp'

console.log('test MyHttp:', myHttp)
export default 'test plugin'

webpack 配置 externals

externals: {
    MyHttp: 'MyHttp'
}

App项目中有:

http.js

import axios from 'axios'

axios.defaults.timeout = 5000
axios.defaults.baseURL = http://myapigateway/
axios.defaults.headers.common['Content-Type'] = 'application/json'
// ...其他配置

export default axios

main.js

import test from 'common-plugins/lib/test'

console.log('imported', test)

webpack 配置 resolve.alias

resolve: {
    alias: {
        'MyHttp': path.resolve(__dirname, '../src/http')
    }
}

App项目通过npm link命令本地依赖插件项目。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题