process.env.VUE_LOADER_TEST = true var path = require('path') var webpack = require('webpack') var MemoryFS = require('memory-fs') var jsdom = require('jsdom') var expect = require('chai').expect var rimraf = require('rimraf') var genId = require('vue-loader/lib/gen-id') var SourceMapConsumer = require('source-map').SourceMapConsumer var ExtractTextPlugin = require("extract-text-webpack-plugin") var compiler = require('vue-loader/lib/template-compiler') var normalizeNewline = require('normalize-newline') var vuxLoader = require('../src/index.js') var i18nParser = require('../libs/parse-i18n-function').parse const i18nParserForScript = require('../libs/replace-i18n-for-script').replace const getI18nBlock = require('../libs/get-i18n-block').get const getI18nBlockWithLocale = require('../libs/get-i18n-block').getWithLocale function getOptionsPlugin(config) { const match = config.plugins.filter(one => { return one.constructor.name === 'LoaderOptionsPlugin' }) return match[0] } // var loaderPath = 'expose-loader?vueModule!' + path.resolve(__dirname, '../node_modules/vue-loader/index.js') var loaderPath = 'expose-loader?vueModule!' + path.resolve(__dirname, '../src/index.js') + '!vue-loader' var mfs = new MemoryFS() var globalConfig = { output: { path: '/', filename: 'test.build.js' }, module: { rules: [ { test: /\.vue$/, loader: loaderPath } ] } } function bundle(options, vuxOptions, cb) { var vueOptions = options.vue delete options.vue var config = Object.assign(globalConfig, options) // assign vue Options if (vueOptions) { config.plugins = (config.plugins || []).concat(new webpack.LoaderOptionsPlugin({ vue: vueOptions })) } let basicVux = { options: { loaderString: loaderPath, rewriteLoaderString: false, isWebpack2: true, isTest: true } } if (vuxOptions.options) { for (let i in vuxOptions.options) { basicVux.options[i] = vuxOptions.options[i] } } if (vuxOptions.plugins) { basicVux.plugins = vuxOptions.plugins } config = vuxLoader.merge(config, basicVux) var webpackCompiler = webpack(config) webpackCompiler.outputFileSystem = mfs webpackCompiler.run(function (err, stats) { expect(err).to.be.null if (stats.compilation.errors.length) { stats.compilation.errors.forEach(function (err) { console.error(err.message) }) } expect(stats.compilation.errors).to.be.empty cb(mfs.readFileSync('/test.build.js').toString()) }) } function test(options, vuxOptions, assert) { bundle(options, vuxOptions, function (code) { jsdom.env({ html: '', src: [code], done: function (err, window) { if (err) { console.log(err[0].data.error.stack) expect(err).to.be.null } assert(window, interopDefault(window.vueModule), window.vueModule) } }) }) } function mockRender(options, data) { return options.render.call(Object.assign({ _v(val) { return val }, _self: {}, $createElement(tag, data, children) { if (Array.isArray(data)) { children = data data = null } return { tag: tag, data: data, children: children } }, _m(index) { return options.staticRenderFns[index].call(this) }, _s(str) { return String(str) } }, data)) } function interopDefault(module) { return module ? module.__esModule ? module.default : module : module } var parse = require('../src/libs/import-parser') const str = parse(`