123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- /**
- * @fileoverview Disallow `require/modules.exports/exports` in `nuxt.config.js`
- * @author Xin Du <clark.duxin@gmail.com>
- */
- 'use strict'
- const path = require('path')
- // ------------------------------------------------------------------------------
- // Rule Definition
- // ------------------------------------------------------------------------------
- module.exports = {
- meta: {
- docs: {
- description:
- 'disallow commonjs module api `require/modules.exports/exports` in `nuxt.config.js`',
- category: 'base'
- },
- messages: {
- noCjs: 'Unexpected {{cjs}}, please use {{esm}} instead.'
- }
- },
- create (context) {
- // variables should be defined here
- const options = context.options[0] || {}
- const configFile = options.file || 'nuxt.config.js'
- let isNuxtConfig = false
- // ----------------------------------------------------------------------
- // Public
- // ----------------------------------------------------------------------
- return {
- Program (node) {
- const filename = path.basename(context.getFilename())
- if (filename === configFile) {
- isNuxtConfig = true
- }
- },
- MemberExpression: function (node) {
- if (!isNuxtConfig) {
- return
- }
- // module.exports
- if (node.object.name === 'module' && node.property.name === 'exports') {
- context.report({
- node,
- messageId: 'noCjs',
- data: {
- cjs: 'module.exports',
- esm: 'export default'
- }
- })
- }
- // exports.
- if (node.object.name === 'exports') {
- const isInScope = context.getScope()
- .variables
- .some(variable => variable.name === 'exports')
- if (!isInScope) {
- context.report({
- node,
- messageId: 'noCjs',
- data: {
- cjs: 'exports',
- esm: 'export default'
- }
- })
- }
- }
- },
- CallExpression: function (call) {
- const module = call.arguments[0]
- if (
- !isNuxtConfig ||
- context.getScope().type !== 'module' ||
- !['ExpressionStatement', 'VariableDeclarator'].includes(call.parent.type) ||
- call.callee.type !== 'Identifier' ||
- call.callee.name !== 'require' ||
- call.arguments.length !== 1 ||
- module.type !== 'Literal' ||
- typeof module.value !== 'string'
- ) {
- return
- }
- context.report({
- node: call.callee,
- messageId: 'noCjs',
- data: {
- cjs: 'require',
- esm: 'import'
- }
- })
- }
- }
- }
- }
|