You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
40 lines
1.2 KiB
40 lines
1.2 KiB
/** |
|
* Copyright (c) 2015-present, Facebook, Inc. |
|
* |
|
* This source code is licensed under the MIT license found in the |
|
* LICENSE file in the root directory of this source tree. |
|
*/ |
|
|
|
'use strict'; |
|
|
|
const loaderUtils = require('loader-utils'); |
|
const path = require('path'); |
|
|
|
module.exports = function getLocalIdent( |
|
context, |
|
localIdentName, |
|
localName, |
|
options |
|
) { |
|
// Use the filename or folder name, based on some uses the index.js / index.module.(css|scss|sass) project style |
|
const fileNameOrFolder = context.resourcePath.match( |
|
/index\.module\.(css|scss|sass)$/ |
|
) |
|
? '[folder]' |
|
: '[name]'; |
|
// Create a hash based on a the file location and class name. Will be unique across a project, and close to globally unique. |
|
const hash = loaderUtils.getHashDigest( |
|
path.posix.relative(context.rootContext, context.resourcePath) + localName, |
|
'md5', |
|
'base64', |
|
5 |
|
); |
|
// Use loaderUtils to find the file or folder name |
|
const className = loaderUtils.interpolateName( |
|
context, |
|
fileNameOrFolder + '_' + localName + '__' + hash, |
|
options |
|
); |
|
// Remove the .module that appears in every classname when based on the file and replace all "." with "_". |
|
return className.replace('.module_', '_').replace(/\./g, '_'); |
|
};
|
|
|