账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    vue插件发npm的图片资源该怎么处理?
    22
    0

    我把项目使用的一个简单的弹窗组件做成插件,提交到npm了。
    但是我安装之后发现图片资源的路径引用错误,找不到插件的图片。
    检查代码发现图片被打包到dist/文件下面了,没有转化成base64并入代码中。
    插件使用的vue-cli init webpack-simple 命令创建项目,webpack.config.js中的配置文件如下:

    var path = require('path')
    var webpack = require('webpack')
    
    
    const NODE_ENV = process.env.NODE_ENV
    
    module.exports = {
      entry: NODE_ENV == 'development' ? './src/main.js' : './src/lib/index.js',
      output: {
        path: path.resolve(__dirname, './dist'),
        publicPath: '/dist/',
        library: 'easy-layer',
        libraryTarget: 'umd',
        filename: 'easy-layer.js'
      },
      module: {
        rules: [
          {
            test: /\.css$/,
            use: [
              'vue-style-loader',
              'css-loader'
            ],
          },      {
            test: /\.vue$/,
            loader: 'vue-loader',
            options: {
              loaders: {
              }
              // other vue-loader options go here
            }
          },
          {
            test: /\.js$/,
            loader: 'babel-loader',
            exclude: /node_modules/
          },
          {
            test: /\.(png|jpg|gif|svg)$/,
            loader: 'file-loader',
            options: {
              name: '[name].[ext]?[hash]'
            }
          }
        ]
      },
      resolve: {
        alias: {
          'vue$': 'vue/dist/vue.esm.js'
        },
        extensions: ['*', '.js', '.vue', '.json']
      },
      devServer: {
        historyApiFallback: true,
        noInfo: true,
        overlay: true
      },
      performance: {
        hints: false
      },
      devtool: '#eval-source-map'
    }
    
    if (process.env.NODE_ENV === 'production') {
      module.exports.devtool = '#source-map'
      // http://vue-loader.vuejs.org/en/workflow/production.html
      module.exports.plugins = (module.exports.plugins || []).concat([
        new webpack.DefinePlugin({
          'process.env': {
            NODE_ENV: '"production"'
          }
        }),
        new webpack.optimize.UglifyJsPlugin({
          sourceMap: true,
          compress: {
            warnings: false
          }
        }),
        new webpack.LoaderOptionsPlugin({
          minimize: true
        })
      ])
    }

    我尝试过修改

          {
            test: /\.(png|jpg|gif|svg)$/,
            loader: 'file-loader',
            options: {
              name: '[name].[ext]?[hash]'
            }
          }

    增加了limit参数,但是没有效果。
    试过不写任何代码,只写一个css和,引用logo.png,打包也没有转化图片资源。
    这个问题该怎么解决?

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 文坛小学生 普通会员 1楼

      在Vue.js中,我们可以使用npm来安装和管理依赖,然后使用npm的image模块来处理图片资源。以下是一个基本的示例:

      1. 首先,确保已经安装了@vue/cli@vue/image模块:

      npm install -g @vue/cli @vue/image

      1. 创建一个新的Vue项目:

      bash vue create my-project

      1. 在项目根目录下创建一个名为public的文件夹,用于存放公共图片资源。

      2. public文件夹中创建一个名为images的文件夹,用于存放项目内的图片资源。

      3. images文件夹中创建一个名为index.html的文件,如下所示:

      ```html

      Vue Image Resource
      Example Image

      ```

      1. 在项目根目录下创建一个名为package.json的文件,如下所示:

      json { "name": "my-project", "version": "1.0.0", "description": "My Vue Image Resource", "main": "index.js", "scripts": { "serve": "vue-cli-service serve", "build": "vue-cli-service build", "lint": "vue-cli-service lint" }, "dependencies": { "@vue/cli-plugin-babel": "^3.9.0", "@vue/cli-plugin-eslint": "^3.9.0", "@vue/cli-plugin-router": "^3.9.0", "@vue/cli-plugin-vuex": "^3.9.0", "@vue/cli-plugin-vuex-router-link": "^1.0.0", "@vue/cli-plugin-vuex-router-link-scroll": "^1.0.0", "axios": "^0.24.0", "eslint": "^8.3.0", "img-loader": "^6.1.2", "node-sass": "^4.14.1", "vue-style-loader": "^4.1.3", "vue-template-compiler": "^2.6.14" }, "devDependencies": { "@vue/cli-plugin-eject": "^3.9.0", "@vue/cli-plugin-eslint-tester": "^3.9.0", "@vue/cli-plugin-router-tester": "^3.9.0", "@vue/cli-plugin-vuex-tester": "^3.9.0", "@vue/cli-plugin-vuex-router-link-tester": "^1.0.0", "@vue/cli-plugin-vuex-router-link-scroll-tester": "^1.0.0", "eslint-plugin-import": "^2.23.0", "eslint-plugin-node": "^8.1.0", "eslint-plugin-promise": "^4.0.2", "eslint-plugin-standard": "^4.0.0", "jest": "^26.5.0", "postcss-loader": "^5.3.0", "style-loader": "^1.1.1", "vue-cli-plugin-image": "^1.0.0" } }

      1. 在项目根目录下创建一个名为src的文件夹,用于存放项目内的静态资源,如CSS、JavaScript等。

      2. src文件夹中创建一个名为index.css的文件,如下所示:

      ```css body { margin: 0; padding: 0; font-family: Arial, sans-serif; }

      img { max-width: 100%; height: auto; }

      img:hover { transform: scale(1.1); } ```

      1. src文件夹中创建一个名为src/components的文件夹,用于存放组件中的图片资源。

      2. src/components文件夹中创建一个名为MyComponent.vue的文件,如下所示:

      ```html

      ```

      1. src/components文件夹中创建一个名为MyComponent.js的文件,如下所示:

      ```javascript import { Image } from '@/components/MyComponent.vue';

      export default { name: 'MyComponent', props: { image: { type: String, required: true, }, }, mounted() { const imageURL = this.imageURL; const image = new Image(); image.src = imageURL; image.onload = () => { const srcKey = this.imageKey; this.$emit('image-uploaded', { src: image.src, srcKey: srcKey, }); }; }, }; ```

      1. 在项目根目录下创建一个名为src/router的文件夹,用于处理路由功能。

      2. src/router文件夹中创建一个名为MyComponent.js的文件,如下所示:

      ```javascript import { Image } from '@/components/MyComponent.vue';

      export default { name: 'MyComponent', routes: [ { path: '/my-image', component: () => import('/src/components/MyComponent.vue'), name: 'MyComponentImage', }, ], }; ```

      1. 在项目根目录下创建一个名为src/router/index.js的文件,如下所示:

      ```javascript import Vue from 'vue'; import VueRouter from 'vue-router';

      import App from './App.vue'; import MyComponent from './components/MyComponent.vue';

      Vue.use(VueRouter);

      const router = new VueRouter({ routes: [ { path: '/my-image', component: MyComponent, }, ], });

      export default router; ```

      1. src/router/index.js文件中,导入App.vueMyComponent.vue并注册路由。

      2. src/router/index.js文件中,注册MyComponent路由:

      ```javascript import App from './App.vue'; import MyComponent from './components/MyComponent.vue';

      Vue.use(VueRouter);

      router.push('/my-image', { component: MyComponent, name: 'MyComponentImage', }); ```

      1. src/main.js文件中,使用npm run serve命令启动项目并打开浏览器访问http://localhost:3000/my-image,即可看到在组件中显示的图片资源。

      注意:在实际使用中,图片资源的上传、加载和渲染等逻辑可能需要根据具体需求进行调整,如使用axios库进行网络请求、设置图片大小限制、设置图片样式等。此外,为了确保图片资源的安全性,可能需要在http请求中添加证书或使用一些安全的图片加载库,如PWA(Progressive Web App)和CORS(Cross-Origin Resource Sharing)等。

    更多回答
    扫一扫访问手机版