如何快速入門VUE3.0:進入學習
最近寫nodejs腳本較多,遇到一個問題。修改了package.json 的type: "module" 後,部分工具無法正常使用(eg postcss-cli)。
本文主要是記錄下解決在esmodule模式下,如何使用commonjs 模組的問題。
1、更換插件;
好像是廢話,其實不然。還是以postcss舉例,其實早已有issue跟進,但一直還沒更新過來。有看到重新實現的例如postcss-es-modules(下載量不高,暫時沒去試過)。
或透過vite/rollup框架本身的支援去使用外掛程式(後面再說框架本身是怎麼處理的), eg
// tailwind.config.js export default { purge: ['./*.html', './src/**/*.{vue,js,ts,jsx,tsx,css}'], darkMode: false, // 或 'media' or 'class' theme: { extend: {}, }, variants: { extend: {}, }, plugins: [], } // postcss.config.js import tailwind from 'tailwindcss' import autoprefixer 從 'autoprefixer' import tailwindConfig from './tailwind.config.js' export default { plugins: [tailwind(tailwindConfig), autoprefixer], } // vite.config.js css: { postcss, }
2、透過nodejs支援的拓展方式(type: "module"情況下),將檔案後綴改為.cjs,然後就可以透過import default from '*.cjs' 導入commonjs 模組;eg
// utils.cjs function sum(a, b) { return a + b } module.exports = { sum } // index.js import utils from './utils.js' console.log(utils.sum(1, 2))
3、透過package.json的exports 欄位分別標誌不同模組的入口檔案(這也是大部分三方函式庫常用做法);eg
// package.json "exports": { "import": "./index.js", "require": "./index.cjs" }
1、nodejs分別是怎麼處理.mjs/.cjs後綴檔的?
nodejs總是以esmodule 模組載入.mjs文件,以commonjs 載入.cjs 檔案。當package.json設定了type: "module" 時,總是以esmodule 載入.js檔。