diff options
| author | ruki <waruqi@gmail.com> | 2018-11-08 00:38:48 +0800 |
|---|---|---|
| committer | ruki <waruqi@gmail.com> | 2018-11-07 21:53:09 +0800 |
| commit | 26105034da4fcce7ac883c899d781f016559310d (patch) | |
| tree | c459a5dc4e3aa0972d9919033ece511ce76dd129 /node_modules/vue-style-loader/index.js | |
| parent | 2c77f00f1a7ecb6c8192f9c16d3b2001b254a107 (diff) | |
| download | xmake-docs-26105034da4fcce7ac883c899d781f016559310d.tar.gz xmake-docs-26105034da4fcce7ac883c899d781f016559310d.zip | |
switch to vuepress
Diffstat (limited to 'node_modules/vue-style-loader/index.js')
| -rw-r--r-- | node_modules/vue-style-loader/index.js | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/node_modules/vue-style-loader/index.js b/node_modules/vue-style-loader/index.js new file mode 100644 index 00000000..4adcd219 --- /dev/null +++ b/node_modules/vue-style-loader/index.js @@ -0,0 +1,98 @@ +/* + MIT License http://www.opensource.org/licenses/mit-license.php + Author Tobias Koppers @sokra + Modified by Evan You @yyx990803 +*/ +var loaderUtils = require('loader-utils') +var path = require('path') +var hash = require('hash-sum') +var qs = require('querystring') + +module.exports = function () {} + +module.exports.pitch = function (remainingRequest) { + var isServer = this.target === 'node' + var isProduction = this.minimize || process.env.NODE_ENV === 'production' + var addStylesClientPath = loaderUtils.stringifyRequest(this, '!' + path.join(__dirname, 'lib/addStylesClient.js')) + var addStylesServerPath = loaderUtils.stringifyRequest(this, '!' + path.join(__dirname, 'lib/addStylesServer.js')) + var addStylesShadowPath = loaderUtils.stringifyRequest(this, '!' + path.join(__dirname, 'lib/addStylesShadow.js')) + + var request = loaderUtils.stringifyRequest(this, '!!' + remainingRequest) + var relPath = path.relative(__dirname, this.resourcePath).replace(/\\/g, '/') + var id = JSON.stringify(hash(request + relPath)) + var options = loaderUtils.getOptions(this) || {} + + // direct css import from js --> direct, or manually call `styles.__inject__(ssrContext)` with `manualInject` option + // css import from vue file --> component lifecycle linked + // style embedded in vue file --> component lifecycle linked + var isVue = ( + /"vue":true/.test(remainingRequest) || + options.manualInject || + qs.parse(this.resourceQuery.slice(1)).vue != null + ) + + var shared = [ + '// style-loader: Adds some css to the DOM by adding a <style> tag', + '', + '// load the styles', + 'var content = require(' + request + ');', + // content list format is [id, css, media, sourceMap] + "if(typeof content === 'string') content = [[module.id, content, '']];", + 'if(content.locals) module.exports = content.locals;' + ] + + // shadowMode is enabled in vue-cli with vue build --target web-component. + // exposes the same __inject__ method like SSR + if (options.shadowMode) { + return shared.concat([ + '// add CSS to Shadow Root', + 'var add = require(' + addStylesShadowPath + ').default', + 'module.exports.__inject__ = function (shadowRoot) {', + ' add(' + id + ', content, shadowRoot)', + '};' + ]).join('\n') + } else if (!isServer) { + // on the client: dynamic inject + hot-reload + var code = [ + '// add the styles to the DOM', + 'var add = require(' + addStylesClientPath + ').default', + 'var update = add(' + id + ', content, ' + isProduction + ', ' + JSON.stringify(options) + ');' + ] + if (!isProduction) { + code = code.concat([ + '// Hot Module Replacement', + 'if(module.hot) {', + ' // When the styles change, update the <style> tags', + ' if(!content.locals) {', + ' module.hot.accept(' + request + ', function() {', + ' var newContent = require(' + request + ');', + " if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];", + ' update(newContent);', + ' });', + ' }', + ' // When the module is disposed, remove the <style> tags', + ' module.hot.dispose(function() { update(); });', + '}' + ]) + } + return shared.concat(code).join('\n') + } else { + // on the server: attach to Vue SSR context + if (isVue) { + // inside *.vue file: expose a function so it can be called in + // component's lifecycle hooks + return shared.concat([ + '// add CSS to SSR context', + 'var add = require(' + addStylesServerPath + ').default', + 'module.exports.__inject__ = function (context) {', + ' add(' + id + ', content, ' + isProduction + ', context)', + '};' + ]).join('\n') + } else { + // normal import + return shared.concat([ + 'require(' + addStylesServerPath + ').default(' + id + ', content, ' + isProduction + ')' + ]).join('\n') + } + } +} |
