webpack loader実現
2324 ワード
位置
まず、私達はloaderプラグインがどこに書いてあるかを知りたいです.
開く
おわりに
このように私達は自分達のloaderを創建することができます.中では私達のソースコードに対して違った操作を行います.例えば、vue-loaderはラベルを通して3種類の()、js、css)システムのコードを分けて、残りのloaderの中の本文に書いてあるloader:https://github.com/Grewer/JsDemo/blob/master/webpackLoader/loader.ts
まず、私達はloaderプラグインがどこに書いてあるかを知りたいです.
開く
webpack.config.js
ファイルは、module.rules
に私達のカスタムloaderを加入する:{
test: /.ts$/,
use: [
{
loader: path.resolve(__dirname,'./build/loader.js'),
options: { foo: true, }
}
]
}
パラメータ取得:const options = getOptions(this);
着信パラメータの校正:const schema = {
type: 'object',
properties: { test: { type: 'string' } }
} as const
validate(schema, options);
私達は対応するパスのloader.tsを作成します.ここではtsを使ってloader:loader.tsを書きます.import {getOptions} from 'loader-utils';
import {validate} from 'schema-utils';
const schema = {
type: 'object', properties: { test: { type: 'string' } }} as const
//
export default function (source) {
// getOptions const options = getOptions(this); // , Error
validate(schema, options);
//
console.log('source', source) //
// :
const _source = source.replace(/alert(1)/, `console.log('grewer')`)
console.log('_source', _source)
return _source;
};
typescriptのAPIを使ってtsコードを解析します. const compiler = typescript
let result = compiler.transpileModule(source, { compilerOptions: { module: typescript.ModuleKind.CommonJS } })
console.log(result.outputText)
return result.outputText;
transpileModule
このAPIについては、ドキュメントを見る必要があります.元のドキュメント:https://github.com/Microsoft/TypeScript/wiki/Using-the-Compiler-API翻訳の中国語文書:https://zhuanlan.zhihu.com/p/141410800 typescriptは、私たちがあまり使わないアプリがたくさんあります.興味があれば、自分で調べてもいいです.おわりに
このように私達は自分達のloaderを創建することができます.中では私達のソースコードに対して違った操作を行います.例えば、vue-loaderはラベルを通して3種類の()、js、css)システムのコードを分けて、残りのloaderの中の本文に書いてあるloader:https://github.com/Grewer/JsDemo/blob/master/webpackLoader/loader.ts