강의

멘토링

커뮤니티

Cộng đồng Hỏi & Đáp của Inflearn

Hình ảnh hồ sơ của prismweaver
prismweaver

câu hỏi đã được viết

Tìm hiểu và thực hành về môi trường phát triển frontend (webpack, babel, eslint..)

phần bổ trợ

compiler.plugin 이 undefined라고 뜹니다.

Viết

·

621

3

안녕하세요

TypeError: compiler.plugin is not a function

위와 같은 에러가 떠서 compiler를 찍어봤더니 plugin이 존재하지 않아서 undefined라고 뜹니다.

compiler.hooks.emit.tapAsync(
      'emit',
      (compilation, callback) => {
        const source = compilation.assets['main.js'].source();
        console.log(source);
        callback();
      })
  }

이 방식을 사용하면 똑같이 나오는데

버전이 바뀐 것인가요?

eslintnodejsbabel웹팩

Câu trả lời 3

4

웹팩 5에서 실습해보려 하는 분들

 

아래 코드처럼 해보세요.

 

class MyPlugin {
    apply(compiler) {
        compiler.hooks.done.tap("My Plugin", (stats) => {
            console.log("MyPlugin worked");
        });

        compiler.hooks.emit.tapAsync("My Plugin", (compilation, callback) => {
            console.log(
                "compilation.assets['main.js']",
                compilation.assets["main.js"].source()
            );

            callback();
        });
    }
}

module.exports = MyPlugin;

0

웹팩 5버전에서 할려면 코드를 어떻게 수정해야 하나요?

compiler.hooks.emit.tapAsync('MyWebpackPlugin', (compilation, callback) => {
    const source = compilation.assets['main.js'].source();
    const banner = [
                       '/**',
                       ' * This is result of processing by BannerPlugin.',
                       ' * Build Date: 2023-08-31',
                       ' */',
                   ].join('\n');
    const objectSourceNew = new compilation.compiler.webpack.sources.RawSource(banner + '\n\n' + source);
    compilation.updateAsset('main.js', objectSourceNew);
    callback();
});

이렇게 하면 될 것 같습니다!

0

jeonghwan님의 프로필 이미지
jeonghwan
Người chia sẻ kiến thức

강의에서 사용한 웹팩은 4 버전이고, 아마 위에서 실습하신건 최신 버전인 5버전인 것 같네요. BannerPlugin 코드를 참고한것인데 웹팩 버전 4 기준으로 작성된 코드입니다. 질문해 주셔서 감사합니다.

Hình ảnh hồ sơ của prismweaver
prismweaver

câu hỏi đã được viết

Đặt câu hỏi