英文:
Dev Server has been initialized using an options object that does not match the API schema. - options has an unknown property 'public'
问题
出现了将Django与Vue.js链接的错误。
在我的vue.config.js文件中:
const BundleTracker = require('webpack-bundle-tracker');
module.exports = {
  publicPath: 'http://127.0.0.1:8080/',
  outputDir: './dist/',
  
  chainWebpack: config => {
    config.optimization.splitChunks(false);
    config.plugin('BundleTracker').use(BundleTracker, [{ filename: './webpack-stats.json' }]);
    config.devServer
      .public('http://0.0.0.0:8080')
      .host('0.0.0.0')
      .port(8080)
      .https(false)
      .headers({ "Access-Control-Allow-Origin": ["*"] });
  },
  pages: {
    index: 'src/main.js'
  }
}
这是在命令行中的错误。
npm run serve
> django-vue@0.1.0 serve
> vue-cli-service serve
 INFO  Starting development server...
 ERROR  ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema.
         - options has an unknown property 'public'. These properties are valid:
           object { allowedHosts?, bonjour?, client?, compress?, devMiddleware?, headers?, historyApiFallback?, host?, hot?, http2?, https?, ipc?, liveReload?, magicHtml?, onAfterSetupMiddleware?, onBeforeSetupMiddleware?, onListening?, open?, port?, proxy?, server?, setupExitSignals?, setupMiddlewares?, static?, watchFiles?, webSocketServer? }
ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema.
 - options has an unknown property 'public'. These properties are valid:
   object { allowedHosts?, bonjour?, client?, compress?, devMiddleware?, headers?, historyApiFallback?, host?, hot?, http2?, https?, ipc?, liveReload?, magicHtml?, onAfterSetupMiddleware?, onBeforeSetupMiddleware?, onListening?, open?, port?, proxy?, server?, setupExitSignals?, setupMiddlewares?, static?, watchFiles?, webSocketServer? }
    at validate (/Users/byengju/Documents/01. Project/dataglass/django-vue/node_modules/schema-utils/dist/validate.js:115:11)
    at new Server (/Users/byengju/Documents/01. Project/dataglass/django-vue/node_modules/webpack-dev-server/lib/Server.js:231:5)
    at serve (/Users/byengju/Documents/01. Project/dataglass/django-vue/node_modules/@vue/cli-service/lib/commands/serve.js:194:20)
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
我该如何解决这个问题?
英文:
There was an error linking django with vuejs.
in my vue.config.js file:
const BundleTracker = require('webpack-bundle-tracker');
module.exports = {
  publicPath: 'http://127.0.0.1:8080/',
  outputDir: './dist/',
  chainWebpack: config => {
    config.optimization.splitChunks(false)
    config.plugin('BundleTracker').use(BundleTracker, [{filename: './webpack-stats.json'}])
    config.devServer.public('http://0.0.0.0:8080').host('0.0.0.0').port(8080).https(false).headers({"Access-Control-Allow-Origin":["\*"]})
  },
  pages: {
    index: 'src/main.js'
  }
}
This is an error on cmd.
npm run serve
> django-vue@0.1.0 serve
> vue-cli-service serve
INFO  Starting development server...
ERROR  ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema.
- options has an unknown property 'public'. These properties are valid:
object { allowedHosts?, bonjour?, client?, compress?, devMiddleware?, headers?, historyApiFallback?, host?, hot?, http2?, https?, ipc?, liveReload?, magicHtml?, onAfterSetupMiddleware?, onBeforeSetupMiddleware?, onListening?, open?, port?, proxy?, server?, setupExitSignals?, setupMiddlewares?, static?, watchFiles?, webSocketServer? }
ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema.
- options has an unknown property 'public'. These properties are valid:
object { allowedHosts?, bonjour?, client?, compress?, devMiddleware?, headers?, historyApiFallback?, host?, hot?, http2?, https?, ipc?, liveReload?, magicHtml?, onAfterSetupMiddleware?, onBeforeSetupMiddleware?, onListening?, open?, port?, proxy?, server?, setupExitSignals?, setupMiddlewares?, static?, watchFiles?, webSocketServer? }
at validate (/Users/byengju/Documents/01. Project/dataglass/django-vue/node_modules/schema-utils/dist/validate.js:115:11)
at new Server (/Users/byengju/Documents/01. Project/dataglass/django-vue/node_modules/webpack-dev-server/lib/Server.js:231:5)
at serve (/Users/byengju/Documents/01. Project/dataglass/django-vue/node_modules/@vue/cli-service/lib/commands/serve.js:194:20)
at process.processTicksAndRejections (node:internal/process/task_queues:95:5) 
How do I solve it?
答案1
得分: 1
正如错误提示所述,public 在你的代码中不是一个有效的属性,你使用了 config.devServer.public('http://0.0.0.0:8080')。public 是webpack-dev-server v3中的属性,但根据你的错误信息和可用属性名称列表,显然你正在使用webpack-dev-server v4。
不过,你需要问自己是否需要指定通常作为默认 devserver 地址的 0.0.0.0:8080(localhost:8080)。尝试移除该属性并测试你的应用是否正常工作。通常,这样的属性仅在代理或 WebSocket 地址时才需要。迁移指南 从 v3 到 v4 甚至指出:
public、sockHost、sockPath 和 sockPort 选项已被移除,以支持 client.webSocketURL 选项:
v3:
module.exports = {
  devServer: {
    public: "ws://localhost:8080",
  },
};
module.exports = {
  devServer: {
    sockHost: "0.0.0.0",
    sockPath: "/ws",
    sockPort: 8080,
  },
};
v4:
module.exports = {
  devServer: {
    client: {
      // 可以是字符串:
      //
      // 从浏览器获取协议/主机名/端口
      // webSocketURL: 'auto://0.0.0.0:0/ws';
      webSocketURL: {
        hostname: "0.0.0.0",
        pathname: "/ws",
        port: 8080,
      },
    },
  },
};
英文:
As the error states, public is not a valid property where you have config.devServer.public('http://0.0.0.0:8080').  It is a property from webpack-dev-server v3 but based on your error message and the list of available property names, you are clearly on webpack-dev-server v4.
Ask yourself though: do you need to specify what is normally the default devserver address, 0.0.0.0:8080 (localhost:8080)? Try just removing the property and test if your app works. Usually such a property is only needed for proxy or websocket addresses. The migration guide from v3 to v4 even says:
> public, sockHost, sockPath, and sockPort options were removed in favor client.webSocketURL option:
v3:
module.exports = {
  devServer: {
    public: "ws://localhost:8080",
  },
};
module.exports = {
  devServer: {
    sockHost: "0.0.0.0",
    sockPath: "/ws",
    sockPort: 8080,
  },
};
v4:
module.exports = {
  devServer: {
    client: {
      // Can be `string`:
      //
      // To get protocol/hostname/port from browser
      // webSocketURL: 'auto://0.0.0.0:0/ws'
      webSocketURL: {
        hostname: "0.0.0.0",
        pathname: "/ws",
        port: 8080,
      },
    },
  },
};
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。


评论