安装在node_modules中时无法加载vue文件

时间:2018-03-21 16:56:43

标签: webpack vue.js

我想使用第三方插件但是无法通过我的webpack配置加载它,因为vue-loader没有正确配置(我认为) 导入项目文件夹中的我自己的组件。

(function (exports, require, module, __filename, __dirname) { <template>

SyntaxError: Unexpected token <

尝试从包中导入.vue文件时出现此错误:

const path = require('path')
const webpack = require('webpack')
const vueConfig = require('./vue-loader.config')
const ExtractTextPlugin = require('extract-text-webpack-plugin')
const FriendlyErrorsPlugin = require('friendly-errors-webpack-plugin')
const nodeExternals = require('webpack-node-externals')

const isProd = process.env.NODE_ENV === 'production'

module.exports = {
  devtool: isProd
    ? false
    : '#cheap-module-source-map',
  output: {
    path: path.resolve(__dirname, '../dist'),
    publicPath: '/dist/',
    filename: '[name].[chunkhash].js'
  },
  resolve: {
    alias: {
      'public': path.resolve(__dirname, '../public')
    }
  },
  module: {
    noParse: /es6-promise\.js$/, // avoid webpack shimming process
    rules: [
      {
        test: /\.vue$/,
        loader: 'vue-loader',
        options: vueConfig
      },
      {
        test: /\.js$/,
        loader: 'babel-loader',
        exclude: /node_modules\/,
        query: {
          plugins: ['transform-runtime']
        }
      },
      {
        test: /\.(png|jpg|gif|svg)$/,
        loader: 'url-loader',
        options: {
          limit: 10000,
          name: '[name].[ext]?[hash]'
        }
      },
      {
        test: /\.css$/,
        use: isProd
          ? ExtractTextPlugin.extract({
              use: 'css-loader?minimize',
              fallback: 'vue-style-loader'
            })
          : ['vue-style-loader', 'css-loader']
      }
    ]
  },
  performance: {
    maxEntrypointSize: 300000,
    hints: isProd ? 'warning' : false
  },
  plugins: isProd
    ? [
        new webpack.optimize.UglifyJsPlugin({
          compress: { warnings: false }
        }),
        new webpack.optimize.ModuleConcatenationPlugin(),
        new ExtractTextPlugin({
          filename: 'common.[chunkhash].css'
        })
      ]
    : [
        new FriendlyErrorsPlugin()
      ]

}

所以我认为如果导入node_modules文件夹中的包,vue-loader就不起作用了。

这是我的webpack配置:

module.exports = {
  extractCSS: process.env.NODE_ENV === 'production',
  preserveWhitespace: false,
  postcss: [
    require('autoprefixer')({
      browsers: ['last 3 versions']
    })
  ]
}

VUE-loader.config.js

root@linuxkit-025000000001:/# /my/dir/path/confluent-4.0.0/bin/confluent start 

node_modules被排除但不应该只为babel-loader而不是vue加载器本身排除?

----编辑

我使用SSR,作者本身在此issue

中说明
  

@johnRivs非常感谢你。 @sbefort您可以导入库   从&#39; vuejs-paginate / src / components / Paginate&#39;中导入Paginate;对于   SSR。如有任何问题,请重新开启此问题。

1 个答案:

答案 0 :(得分:1)

您不想进入NPM包内部。

当你这样做时:

 $('#example').DataTable( {
        initComplete: function () {
            this.api().columns().every( function () {
                var column = this;
                var select = $('<select><option value=""></option></select>')
                    .appendTo( $(column.header()).empty() )
                    .on( 'change', function () {
                        var val = $.fn.dataTable.util.escapeRegex(
                            $(this).val()
                        );

                        column
                            .search( val ? '^'+val+'$' : '', true, false )
                            .draw();
                    } );

                column.data().unique().sort().each( function ( d, j ) {
                    select.append( '<option value="'+d+'">'+d+'</option>' )
                } );
            } );
        }
      }

请注意,您依赖于import Paginate from 'vuejs-paginate/src/components/Paginate.vue' 的内部(vuejs-paginate文件夹存在?)等等。

属性方法是安装包并导入包暴露的内容。

例如,要安装,请在shell上运行:

src

然后在您的代码中,导入并使用如下:

npm install vuejs-paginate --save

WebPack将从import Paginate from 'vuejs-paginate' Vue.component('paginate', Paginate) 独立地(至少关于vuejs-paginat本身)处理其余的事情。是的,vue-loader应排除vue-loader,因为您不希望它处理您导入的每个包的每个原始node_modules文件。