javascript - Webpack 4 捆绑了错误的 javascript

标签 javascript webpack vue.js vuejs2 webpack-dev-server

我正在构建一个 SSR Vue 项目,我正在使用 webpack 来打包我的文件。服务器的捆绑文件工作正常,但客户端在控制台上显示错误并且代码不起作用。

我使用这些脚本:

"scripts": {
    "serve": "cross-env NODE_ENV=serve webpack-dev-server --config webpack/webpack.client.js --open --inline --hot",
    "dev": "cross-env NODE_ENV=dev && npm run build-client && npm run build-server",
    "prod": "cross-env NODE_ENV=prod && npm run build-client && npm run build-server",
    "build-serve": "cross-env NODE_ENV=dev npm run build-server && npm run build-client && node server.js",
    "build-client": "webpack --config webpack/webpack.client.js --progress --bail",
    "build-server": "webpack --config webpack/webpack.server.js --progress --bail"
  }

这些是 webpack 相关的包:

"webpack": "^4.5.0",
"webpack-cli": "^2.0.14",
"webpack-dev-server": "^3.1.3",
"webpack-merge": "^4.1.2"

奇怪的是当使用 webpack-dev-server 时,代码工作正常。此外,在捆绑服务器文件时,它显示的结果很好。但是当使用客户端捆绑文件时,它不起作用。

这里是错误:

enter image description here enter image description here

更新:

webpack.client.js:

var path = require('path')
var webpack = require('webpack')
var merge = require('webpack-merge')
var base = require('./webpack.config')

base.resolve.modules = (base.resolve.modules || []).concat([

])
base.plugins = (base.plugins || []).concat([
  new webpack.DefinePlugin({
    isServer: false
  })
])

if (process.env.NODE_ENV == 'prod') {
  base.plugins = (base.plugins || []).concat([
    new webpack.optimize.UglifyJsPlugin({
      compress: {
        warnings: false,
        drop_console: true
      },
      output: {
        comments: false
      }
    })
  ]);
}

module.exports = merge(base, {
  entry: path.resolve(__dirname, '../src/entry/client-entry.js'),
  output: {
    path: path.resolve(__dirname, '../dist'),
    publicPath: '/',
    filename: 'assets/build-client.js?[hash]',
  }

});

webpack.config.js:

var path = require('path')
var webpack = require('webpack')
var CopyWebpackPlugin = require('copy-webpack-plugin');
var ExtractTextPlugin = require("extract-text-webpack-plugin");
var extractCSS = new ExtractTextPlugin('assets/styles.css');


module.exports = {
  // devtool: "source-map",
  mode: 'none',
  module: {
    noParse: /es6-promise\.js$/, // avoid webpack shimming process
    rules: [
      {
        test: /\.vue$/,
        loader: 'vue-loader',
      },
      {
        test: /\.html$/,
        loader: 'raw-loader'
      },
      // {
      //   test: /\.js$/,
      //   loader: 'babel-loader',
      //   exclude: [/node_modules/, 'src/pages', 'src/components', 'src/layouts']
      // },
      {
        test: /\.(png|jpg|gif|svg|woff|woff2|eot|ttf)$/,
        loader: 'file-loader',
        options: {
          name: 'assets/[name].[ext]?[hash]'
        }
      },
      {
        test: /\.scss$/,
        loader: extractCSS.extract('css-loader!sass-loader')
      },
      {
        test: /\.css$/,
        loader: 'vue-style-loader!css-loader'
      }
    ]
  },
  plugins: [
    extractCSS,
    new webpack.ContextReplacementPlugin(/moment[\\\/]locale$/, /^\.\/(en|zh-tw)$/),
    new webpack.DefinePlugin({
        'process.env': {
            'NODE_ENV': JSON.stringify(process.env.NODE_ENV || 'dev')
        }
    }),
    // new webpack.optimize.CommonsChunkPlugin({
    //   name: 'vendor'
    // }),
    // generate output HTML
  ],
  resolve: {
    modules: [
      'src',
      'node_modules',
    ],
    alias: {
      '_': 'lodash',
      'vue$': 'vue/dist/vue',
      'assets': path.resolve(__dirname, '../src/assets'),
    }
  },
  devServer: {//this handles the webpack router
    historyApiFallback: true,
    noInfo: true
  }
}

if (process.env.NODE_ENV != 'serve') {

  module.exports.plugins = (module.exports.plugins || []).concat([
    new CopyWebpackPlugin([
      {from: './assets', to: 'assets'},
      {from: './index.html'},
      {from: './index.server.html'}
    ])
  ])
}

if (process.env.NODE_ENV == 'prod') {
  module.exports.plugins = (module.exports.plugins || []).concat([
    new webpack.LoaderOptionsPlugin({
      minimize: true
    })
  ])
}

最佳答案

我发现 CopyWebpackPlugin 插件把一切都搞砸了。我不知道为什么,但是当我删除它时,一切正常。谢谢。

关于javascript - Webpack 4 捆绑了错误的 javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49781229/

相关文章:

javascript - JS CustomEvent 参数在 Angular 中作为未定义传递

javascript - Material -UI + React : Card cannot expand with expander

javascript - 如何从 flatpickr 事件方法访问组件数据?

javascript - Angular 和 Vue 模板和绑定(bind)

laravel - 如何在 vue.js 中转义花括号

JavascriptCore 不从类中导出方法

javascript - 在 Javascript 中推送对象

typescript - 即使不需要模块,Webpack 也会为 node_modules 中的文件提供 "Module has no exported member..."错误

javascript - 'process.env.NODE_ENV' 替换为字符串或进程对象,可在运行时在 create-react-app 中使用

javascript - 带有 typescript 的Videojs插件